typescript 使用 Express、Request 和 Node.js 在打字稿中发送/处理 GET 请求

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/38493568/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-10-21 03:40:37  来源:igfitidea点击:

Sending/handling GET requests in typescript using Express, Request and Node.js

node.jsexpresstypescriptnpm-request

提问by annedroiid

I'm using a combination of Express and Request (installed using npm) to try to send a get request to get some json from the server. However no matter what I do the body that is returned is "undefined".

我正在使用 Express 和 Request(使用 npm 安装)的组合来尝试发送 get 请求以从服务器获取一些 json。但是,无论我做什么,返回的主体都是“未定义的”。

This is the code in my server.js file. The json isn't actually what I'm sending, it's just an example as I can't post what I'm actually sending.

这是我的 server.js 文件中的代码。json 实际上并不是我要发送的内容,这只是一个示例,因为我无法发布我实际发送的内容。

import express = require("express");
import bodyParser = require("body-parser");
let app = express();
app.use(bodyParser.json());

app.get('/config', function(req, res){
    res.json('{name: test}');
})

app.listen(3000);

I've tried both of the following but both of them say that body is undefined.

我已经尝试了以下两种方法,但他们都说 body 是未定义的。

import request = require("request");

let req = {
    url: `http://localhost:3000/config`,
    method: 'GET',
    headers: {
        'Content-Type': 'application/json'
    }
}

request(req, function(error, response, body){
    this.config = JSON.parse(body);
})

request(`/config`, function(err, res, body) {
    this.config = JSON.parse(body);
});

Does anyone know what I'm doing wrong? I've never used express or request before so any tips would be greatly appreciated.

有谁知道我做错了什么?我以前从未使用过 express 或 request,因此将不胜感激任何提示。



UPDATE

更新

If I change the request code to the following, the inside of the function is never run. Does anyone know why this would be?

如果我将请求代码更改为以下内容,则永远不会运行该函数的内部。有谁知道为什么会这样?

let req = {
    url: `http://localhost:3000/config`,
    method: 'GET',
    headers: {
        'Content-Type': 'application/json'
    }
}

request(req, function(error, response, body){
    console.log("response => "+JSON.parse(body));
    return JSON.parse(body);
})

回答by Narcotics

I dont't know if you have posted whole of your server's code, it seems like you missed app.listen(port)so that your server cannot be started up correctly.

我不知道您是否已经发布了整个服务器的代码,似乎您错过了,app.listen(port)因此您的服务器无法正确启动。

Also, if you added if (error) { console.log(error); }at the first line of the callback function of request, you'll find it print an error: [Error: Invalid URI "/config"]

此外,如果您if (error) { console.log(error); }在 的回调函数的第一行添加request,您会发现它打印错误:[Error: Invalid URI "/config"]

And that's why the bodyis always undefined: You have to give the full url such like http://localhost:xxxxto request.

这就是为什么body总是undefined:您必须提供完整的网址,例如http://localhost:xxxxto request

In short:

简而言之:

  • Your server didn't listen to a specific port. app.listen(5678)
  • Your client didn't know the complete url. request('http://localhost:5678/config', (...)=>{...})
  • 您的服务器没有侦听特定端口。 app.listen(5678)
  • 您的客户不知道完整的网址。 request('http://localhost:5678/config', (...)=>{...})

回答by Samuel Toh

Since OP hasn't got it working and I believe the code he got up there is correct. I may as well post my working solution here to help him get started.

由于 OP 还没有让它工作,我相信他在那里得到的代码是正确的。我不妨在这里发布我的工作解决方案以帮助他入门。

Hopefully this will save you hours of debugging...

希望这可以为您节省数小时的调试时间...

Client:

客户:

"use strict";
let request = require("request");

let req = {
    url: `localhost:4444/config`,
    proxy: 'http://localhost:4444',
    method: 'GET',
    headers: {
        'Content-Type': 'application/json'
    }
};

request(req, function (err, res, body) {
    this.config = JSON.parse(body);
    console.log("response => " + this.config);
});

Server:

服务器:

"use strict";
var express = require("express");
var bodyParser = require("body-parser");
var app = express();
var config = require('config');
app.use(bodyParser.json());

app.get('/config', function(req, res){
    res.json('{name: test}');
});

// Start the server
app.set('port', 4444);

app.listen(app.get('port'), "0.0.0.0", function() {
    console.log('started');
});

Output:

输出:

response => {name: test}

响应 => {名称:测试}