我有一个像这样的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?
答案 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流。所以我可能会坚持处理这些事件。