node.js未收到POST回调

时间:2017-07-26 16:47:27

标签: javascript json node.js http postman

我正在将一个json文件发布到node.js监听器,我不能完全理解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();
          });                      
        });
    });

POST详情: 我正在使用Postman创建一个POST请求,Content-Type:application / json以及将json字符串放在原始主体中。什么通常会在POST请求中触发'data'事件?如果我忽略数据事件并且只是从请求体读取,我会遇到问题吗?

Payload details

1 个答案:

答案 0 :(得分:2)

由于您正在使用restify.bodyParser,因此该中间件已经读取了请求正文,因此您的处理程序无法读取(因此没有data个事件)。像request这样的流只能读取一次,直到它耗尽为止。你不能重新阅读"它

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

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

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

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