【问题标题】:How to query a request at Nodejs Proxy Server?如何在 Nodejs 代理服务器上查询请求?
【发布时间】:2018-10-26 09:22:51
【问题描述】:

我有一个这样的 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 呢?

【问题讨论】:

  • 你在哪里定义了变量proxy?。不应该是var proxy = httpProxy.createProxyServer({});
  • 是的,我已经更新了!

标签: node.js proxy


【解决方案1】:

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

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)使这更容易,但由于您正在运行代理服务器,您可能不想在转发到您的源之前解析整个请求流。所以我可能会坚持处理这些事件。

【讨论】:

  • 是的,我在代理服务器上没有正文解析器。您的代码运行良好,是的,我认为它应该处理事件而不是使用正文解析器。我只有一个问题。处理事件返回一个字符串:“id=user003”,如何使其成为Json对象?
  • 一旦你有了整个正文(如果它是作为 json 发送的),调用 JSON.parse(body)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-01-04
  • 2013-09-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-11-11
相关资源
最近更新 更多