【问题标题】:node.js POST callbacks not received未收到 node.js POST 回调
【发布时间】:2018-01-02 03:11:27
【问题描述】:

我正在向 node.js 侦听器发布一个 json 文件,但我不能完全理解 POST 是如何正确构造的,因为在下面的代码中,从未调用过 on('data') 回调。我可以在正文中看到实际的 json 字符串,因此我可以解决缺少回调的问题,但似乎我在生成 POST 请求的方式上做错了。 [邮递员详情如下]

// Server initialization
var server = restify.createServer();
server.use(restify.queryParser());
server.use(CookieParser.parse);
server.use(restify.bodyParser());

// Later, at the point where I register callbacks.
this.server.post('receive', function (request, respond) {
        console.log('Received POST');
        console.log("Headers: %s", JSON.stringify(request.headers));
        console.log("Body: %s", JSON.stringify(request.body));
        var body = '' ;
        var filePath = './data/notes.json';
        
        // this event is never triggered.
        request.on('data', function (data) {
            console.log('Data received.');
            body += data;
        });
        
        request.on('end', function () {
          console.log('End of POST');
          fs.writeFile(filePath, body, function () {
              respond.end();
          });                      
        });
    });

发布详情: 我正在使用 Postman 创建一个 POST 请求,Content-Type: application/json 并将 json 字符串放入原始正文中。什么通常会触发 POST 请求中的“数据”事件?如果我忽略数据事件并仅从请求正文中读取,我会遇到问题吗?

【问题讨论】:

  • 什么是this.server 我不认为http.createServer 返回的对象有post 方法。你在用express吗?
  • 我正在使用restify。我将把它添加到代码 sn-p 中。

标签: javascript json node.js http postman


【解决方案1】:

由于您使用的是restify.bodyParser,因此该中间件已经读取了请求正文,因此您的处理程序不再需要读取(因此没有data 事件)。像request 这样的流只能被读取一次,直到用完为止。你不能“重读”它。

这也意味着您可以只使用request.body,它应该是您发布的 JSON 的(解析)结果。

顺便说一句:我不太了解 Postman,但看起来您正在向服务器发送 JSON 编码的字符串,而不是 JSON 编码的对象

要发送后者,我希望这应该是原始正文数据:

{"body":"this is a test"}

【讨论】:

  • 我正在使用 Restify,但我怀疑你的答案适用于任何一种情况。
  • @RobertSim 是的,我刚刚检查过 Restify,它的行为类似 :) 我会更新我的答案。
猜你喜欢
  • 1970-01-01
  • 2018-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-08
  • 2018-10-07
  • 1970-01-01
相关资源
最近更新 更多