如何在Nodejs代理服务器上查询请求?

时间:2018-10-26 09:22:52

标签: node.js proxy

我有一个像这样的Nodejs代理服务器:

`var http = require('http'),
httpProxy = require('http-proxy');

var proxy = httpProxy.createProxyServer({});

proxy.on('proxyReq', function(proxyReq, req, res, options) {
  proxyReq.setHeader('X-Special-Proxy-Header', 'foobar');
});

var server = http.createServer(function(req, res) {
    console.log(req.body);
  proxy.web(req, res, {
    target: 'http://localhost:3000'
  });
 });

console.log("listening on port 9000")
server.listen(9000);`

当我向原始服务器发布请求时,我想要的是在代理服务器上获取req.body,然后通过代理服务器。 我使用了“ console.log(req.body);”在代理服务器和原始服务器上。我在原始服务器上获得主体对象{“ id”:“ user003”},但在代理服务器上未定义。 那么如何在代理服务器上获取req.body?

1 个答案:

答案 0 :(得分:0)

我怀疑这里的问题是您的代理服务器上没有正文解析器,但您的源头确实有一个解析器。

req.body本身不是由节点设置的。相反,您必须处理req流发出的事件:

let body = '';
req.on('data', (data) => {
    // data is a buffer so need toString()
    body += data.toString();
});

req.on('end', () => {
    // at this point you'll have the full body
    console.log(body);
});

您可以使用主体解析器(例如https://www.npmjs.com/package/body-parser)来简化此操作,但是由于您正在运行代理服务器,因此您可能不希望在转发到源之前解析整个req流。所以我可能会坚持处理这些事件。