Ответ 1
Это не работает, потому что bodyParser перехватывает все тела с помощью парсеров
Теперь у меня есть следующий код:
app.post('server1',function(req,res,next){
var request = require('request');
req.pipe(request.post('server2')).pipe(res);
}
Так что это не сработает - запрос даже не передан на сервер2 - я проверил его и нет входящего запроса.
Я решил точки 1 и 2 следующим образом:
var bodyParser = express.bodyParser();
app.use(function(req,res,next){
if(req.path == '/server1' && req.method == 'POST') {
return next();
}
else {
bodyParser(req,res,next);
}
});
Не очень приятно, но он работает - он просто отключает bodyparser для одного маршрута (POST/server1).
Но я до сих пор не знаю, как получить тело ответа json из запрошенного запроса - у меня есть следующий код:
app.post('/server1',function(req,res,next){
var request = require('request');
var pipe = req.pipe(request.post('/server2'));
pipe.on('end',function(){
var res2 = pipe.response;
console.log(res2);
});
});
res2
объект имеет правильный statusCode и заголовки и так далее, но он не содержит тело - как я могу получить это из объекта res2
? /server2
возвращает некоторые данные в json, но я не знаю, как читать его из ответа...
Это не работает, потому что bodyParser перехватывает все тела с помощью парсеров
Я думаю, ты почти там. Вы должны слушать события data
на трубке, чтобы получить ответ:
app.post('/server1',function(req,res,next) {
var request = require('request');
var pipe = req.pipe(request.post('/server2'));
var response = [];
pipe.on('data',function(chunk) {
response.push(chunk);
});
pipe.on('end',function() {
var res2 = Buffer.concat(response);
console.log(res2);
// don't forget to end the 'res' response after this!
...
});
});
Однако, поскольку вы решили проблему "bodyParser() на пути", вы также можете использовать свою начальную настройку канала, если хотите просто вернуть ответ, сгенерированный сервером2 (также обязательно используйте правильный URL-адрес при использовании request
).