我需要获取 Node/快速应用程序中特定端点的原始发布数据。我这样做:
app.use('/paypal/ipn',function(req, res, next) {
var postData='';
req.on('data', function(chunk) {
postData += chunk;
});
req.on('end', function() {
req.rawBody = postData;
console.log('ended buffering. result: ' + req.rawBody);
next();
});
});
发生的事情是我在控制台中获得了 console.log 输出,然后什么也没有发生。大约一分钟后,我看到服务器返回 200 - 可能是超时。这就像 next() 命令永远不会执行,或者执行后失效。
当我注释掉所有内容并简单地调用 next() 时:
app.use('/paypal/ipn',function(req, res, next) {
/*
var postData='';
req.on('data', function(chunk) {
postData += chunk;
});
req.on('end', function() {
req.rawBody = postData;
console.log('ended buffering. result: ' + req.rawBody);
next();
});
*/
next();
});
一切正常,即端点被调用(当然请求不包含 rawBody)。
看来我在缓冲 rawBody 的方式上做错了什么?导致 next() 不起作用的原因?
最佳答案
在不等待“结束”的情况下调用 next(),以防止 bodyParser 和您的代码受到干扰。
app.use(function(req, res, next) {
req.rawBody = '';
req.on('data', function(chunk) {
req.rawBody += chunk;
});
next();
});
app.use(express.bodyParser());
关于node.js - 用于在请求对象中保存原始发布数据的中间件不会是 "next"并导致超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21998980/