向远程服务器发出请求
问题描述:
我试图通过express.js从我的角客户端应用程序代理请求。这是中间件向远程服务器发出请求
app.use('/v1', function(req, res) {
var url = process.env.API_URL + req.url;
console.info('Proxing to: ', url);
var r = null;
switch(req.method) {
case 'POST':
r = request.post({uri: url, json: req.body });
break;
case 'PUT':
r = request.put({uri: url, json: req.body });
break;
default:
r = request(url);
}
console.log(r);
return req.pipe(r).pipe(res);
});
快递服务器正在运行http://localhost:3030。中间件适用于http://localhost:3030/v1的GET请求,但它不适用于POST或PUT请求。 当我发出PUT或POST请求时服务器被终止。这是错误
stream.js:74
throw er; // Unhandled stream error in pipe.
^
Error: write after end
at ClientRequest.OutgoingMessage.write (_http_outgoing.js:426:15)
at Request.write (/Users/user/Projects/maxmc/node_modules/request/request.js:1514:27)
at end (/Users/user/Projects/maxmc/node_modules/request/request.js:552:18)
at Immediate._onImmediate (/Users/user/Projects/maxmc/node_modules/request/request.js:581:7)
at tryOnImmediate (timers.js:543:15)
at processImmediate [as _immediateCallback] (timers.js:523:5)
error Command failed with exit code 1.
我不能确定问题是什么。
答
卸下bodyParser中间件修复了这个
//app.use(bodyParser.json());
//app.use(bodyParser.urlencoded({ extended: true }));
答
尝试使用下面的代码
app.use('/v1', function(req, res) {
var url = process.env.API_URL + req.url;
console.info('Proxing to: ', url);
var r = null;
switch (req.method) {
case 'POST':
r = request.post({
uri: url,
json: req.body
});
return req.pipe(r).pipe(res);
case 'PUT':
r = request.put({
uri: url,
json: req.body
});
return req.pipe(r).pipe(res);
default:
r = request(url);
return req.pipe(r).pipe(res);
}
//console.log(r);
//return req.pipe(r).pipe(res);
});
尝试使用此代码
+0
它返回相同的前结束请求错误 – MrFoh
看来你越来越成功 –