gpt4 book ai didi

node.js - 如何在代理之前检索 POST 请求正文

转载 作者:搜寻专家 更新时间:2023-11-01 00:17:28 25 4
gpt4 key购买 nike

使用 connect Node 上的库,我尝试在使用 node-http-proxy 代理它之前检索请求主体.

自 Node v4 以来,我们必须使用一些中间件,如 bodyParser(或根据请求仅使用 data/end 事件)来检索 POST 请求正文。

问题是,它似乎消耗请求流,并且在被代理时请求超时。

这是代码,首先我用 data 事件检索主体,然后我将它交给 http-proxy,但是请求超时。

var httpProxy = require('http-proxy');
var connect = require('connect');

var proxy = new httpProxy.createProxyServer({
target: {
host: 'localhost',
port: 9015
}
});

var app = connect()
.use(function (req, res, next) {
var bodyBuffer = '';

req.on('data', function (data) {
bodyBuffer += data;
});

req.on('end', function () {
req.body = buffer;

next();
});
})
.use(function (req, res) {

//I can use req.body now
//But the proxy request timeouts
proxy.web(req, res);
});

http.createServer(app).listen(3000);

最佳答案

由于读取流是为了获取请求体,代理请求时不能二次发送。

为此,http-proxy web() 方法中有一个选项可以发送已缓冲的请求。

在第一个中间件上,构造一个 PassThrough 流,其中包含一个包含您检索的正文的缓冲区。例如,根据请求存储它(可能有更好的存储方式),以备后用。

var stream = require('stream');

req.on('end', function() {
req.body = buffer;

var bufferStream = new stream.PassThrough();
bufferStream.end(new Buffer(buffer));
req.bodyStream = bufferStream;

next();
});

然后将其添加到 proxy.web() 调用的第三个参数中,在 buffer 属性中。

proxy.web(req, res, {buffer: req.bodyStream});

关于node.js - 如何在代理之前检索 POST 请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34994202/

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