Node.js 如何在代理请求正文之前检索请求正文

Node.js 如何在代理请求正文之前检索请求正文,node.js,connect,node-http-proxy,Node.js,Connect,Node Http Proxy,在使用节点上的库进行代理之前,我尝试检索请求正文 从节点v4开始,我们必须使用一些中间件,比如bodyParser(或者只是请求时的数据/结束事件)来检索请求后的主体 问题是,它似乎消耗了请求流,并且在代理时请求超时 下面是代码,首先我检索带有数据事件的主体,然后将其交给http代理,但请求超时 var httpProxy = require('http-proxy'); var connect = require('connect'); var proxy = new httpProxy.c

在使用节点上的库进行代理之前,我尝试检索请求正文

从节点v4开始,我们必须使用一些中间件,比如bodyParser(或者只是请求时的数据/结束事件)来检索请求后的主体

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

下面是代码,首先我检索带有数据事件的主体,然后将其交给http代理,但请求超时

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代理
web()
方法上有一个选项可以发送一个已经缓冲的请求

在第一个中间件上,使用包含检索的主体的缓冲区构建一个
直通
流。例如,将其存储在请求上(可能有更好的存储方法),以供以后使用

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});

对于类似的问题,我看到了很多类似的答案,这是最好的答案!我发现的其余答案要么说不使用主体解析,要么在使用之前代理请求。这就克服了它。