使用身体解析器
- application / x-www-form-urlencoded body parser
或
- json body parser
产生相同的结果。
这就是我调用API的方式
$.ajax({ type:'post', url:'/api/order', headers: { 'GreatestHits': 'SteveMillerBand' }, data: { 'the': 'greatest' } });
为什么没有.on('data')
触发? 仅仅是body
请求的data
对象,几乎是?我看到表单数据记录到控制台。我也可以将帖子指向http://httpbin.org/post
来证明这一点。
我只能相信Express是真正的c @ blocker。如果那不是它,那么我不知所措。
// this is the code being called by the $.ajax()
app.use(function (req, res) {
console.log("app.use req.data", req.data);
req.on('data', function (chunk) {
console.log("req.use on data");
}).on('end', function () {
console.log("app.use on end");
});
res.sendStatus(200);
});
在以下每个模型的$.ajax()
帖子上,根据以上代码,结果如下所示:
app.use(callback() {} )
- 有req.body
- 没有req.data(undefined)
- 不会触发.on('数据');
- 不会触发.on(' end');
app.post(callback() {} )
除非包含路径字符串,否则
- 甚至不会被调用。
。
app.post('route', callback() {} )
- 有
req.body
- 没有
req.data
(未定义)
- 不会触发
.on('data');
- 不会触发
.on('end');
app.use('route', callback() {} )
- 有
req.body
- 没有
req.data
(未定义)
- 不会触发
.on('data');
- 会触发
.on('end');
答案 0 :(得分:3)
评论主题已经太长,无法继续添加。不知道我能做什么更好,我发布这个作为继续谈话的答案。
此代码触发.on('end')
app.use(function (req, res, next) {
console.log("app.use req.data", req.body);
req.on('data', function (chunk) {
console.log("req.use on data");
}).on('end', function () {
console.log("app.use on end");
});
next();
});
这是对上述的呼吁;
$.ajax({ type:'post', url:'/api/order', headers: { 'GreatestHits': 'SteveMillerBand' }, data: { 'the': 'greatest' } });
为什么.on('data')
没有触发?我看到表单数据已记录到控制台。
另外。如果数据段被称为req.body
,那么为什么不是req.on('body')
?
因为,我发现,Body-Parser.js
完全消耗了从response
获得的Node.js
对象。它重新编写它,从而重新创建response
作为与node.js
response
对象完全不同的对象。