使用node express的proxy json请求

Jon*_*han 5 proxy json node.js express

我使用以下node-express代码来代理从Web服务器到API服务器的请求:

app.use('/api', function(req, res) {
  var url = 'http://my.domain.com/api' + req.url;
  req.pipe(request(url)).pipe(res);
});
Run Code Online (Sandbox Code Playgroud)

这适用于任何动词(get,post等等)的简单请求,但是一旦我发送'Content-type': 'application/json'请求,它就会挂起pipe.

为什么这个简单的node-express代理代码挂在json请求上?
如何改变它来支持它们?

msc*_*dex 17

您需要 此行之前移动该自定义中间件函数,以便在任何正文解析器之前执行它.这可以确保请求数据仍然存在request(url)于您的自定义中间件中.

悬挂的原因目前是req没有数据写入request(url)(因为身体解析中间件已经读过所有的请求数据,并解析它),所以它永远不会调用.end()request(url)流.这意味着请求url永远不会完成,因为它只是坐在那里等待它永远不会得到的数据.

  • 1)`body-parser`在`req.body`下设置它的解析结果,所以你只需要`JSON.stringify()`并将它写入你的出站请求.2)Express在请求进入时按顺序评估所有中间件和路由.在这种特殊情况下,`config/express`只是添加了一堆中间件(用于处理正文,cookie和会话解析,静态文件服务等),在任何路由之前首先执行,以便路由可以获得已解析的正文内容等.例如,如果您的自定义`/ api`中间件需要有效会话,则必须修改堆栈顺序以满足您的需要. (2认同)