1

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

这是我的 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);

我已经尝试了以下两种方法,但他们都说 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);
});

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


更新

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

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);
})
4

2 回答 2

2

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

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

客户:

"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);
});

服务器:

"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');
});

输出:

响应 => {名称:测试}

于 2016-07-21T03:56:55.290 回答
1

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

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

这就是为什么body总是这样undefined:你必须提供完整的 url,比如http://localhost:xxxxto request

简而言之:

  • 您的服务器未侦听特定端口。app.listen(5678)
  • 您的客户不知道完整的网址。request('http://localhost:5678/config', (...)=>{...})
于 2016-07-21T02:45:32.303 回答