gpt4 book ai didi

node.js - 用于在请求对象中保存原始发布数据的中间件不会是 "next"并导致超时

转载 作者:搜寻专家 更新时间:2023-10-31 23:00:53 26 4
gpt4 key购买 nike

我需要获取 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());

感谢 https://stackoverflow.com/a/21222540/1891397

关于node.js - 用于在请求对象中保存原始发布数据的中间件不会是 "next"并导致超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21998980/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com