我正在将一个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'事件?如果我忽略数据事件并且只是从请求体读取,我会遇到问题吗?
答案 0 :(得分:2)
由于您正在使用restify.bodyParser
,因此该中间件已经读取了请求正文,因此您的处理程序无法读取(因此没有data
个事件)。像request
这样的流只能读取一次,直到它耗尽为止。你不能重新阅读"它
这也意味着您可以使用request.body
,这应该是您发布的JSON的(解析)结果。
顺便说一句:我不太了解Postman,但看起来你正在向服务器发送一个JSON编码的字符串,而不是JSON编码的对象
要发送后者,我希望这应该是原始数据:
{"body":"this is a test"}