我使用以下 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);
});
这适用于任何动词(get、post 等)的简单请求,但是一旦我发送 'Content-type': 'application/json'
请求,它就会挂起pipe
行。
为什么这个简单的 node-express 代理代码会卡在 json 请求上?
如何改变它来支持他们?
最佳答案
之前您需要移动自定义中间件函数 this line以便它在任何主体解析器之前执行。这可确保请求数据仍然存在,以便通过管道传输到自定义中间件中的 request(url)
。
目前挂起的原因是req
没有数据写入request(url)
(因为body解析中间件已经读取了所有的请求数据并且解析它),所以它永远不会在 request(url)
流上调用 .end()
。这意味着对 url
的请求永远不会完成,因为它只是坐在那里等待它永远不会获得的数据。
关于json - 使用 node express 代理 json 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26121830/