Я делаю вызов get из службы nodejs внутри контейнера Docker для API в другом контейнере с модулем request
, все они управляются с помощью docker-compose, и каждый раз, независимо от того, что я пробую в теле ответавсегда либо пусто, либо неопределенно.
когда я звоню почтальону, я получаю тело ответа, которое хочу.
У меня есть два сервиса, определенных в моем docker-compose.yaml
, поэтому вместо использованияlocalhost
и номер порта. Я использую имя сервиса в качестве хоста.
вот вызов:
Request.find({$and : [{status : 'Delivered'},
{pickup : req.params.location}]})
.then(requests => {
var resultRequests = requests.forEach( (request) => {
request.get('http://spare_web:3080/spares/warehouse/'+request.spareSerial, function(err, response, body) {
console.log(response.statusCode); // 200
console.log(response.headers['content-type']); // 'application/json'
console.log(body);//it returns '{"data":[]}' and when i change it to body[0] it returns '{'
console.log(err);
});
})
res.send({data : requests});
})
, а вот API:
exports.findBySerial = (req, res) => {
Spare.find({serial : req.params.serial })
.then(spares => {
res.send(spares);
}).catch(err => {
res.status(500).send({
message: err.message || "Some error occurred while retrieving spares."
});
});
};
обратите внимание, что имя службы API - spare_web
, и он работает на порту3080
первая служба работает на 3088
.
, странная вещь в том, что код состояния всегда 200 OK
, а сообщение err
всегда пустое, что означает, что оно фактически делаетсоединение, но почему оно всегда возвращает пустое тело ответа?
РЕДАКТИРОВАТЬ: после песочницы контроллера и попытки получить что-нибудь из конечной точки в почтовом модуле, я обнаружил, что после получения тела ответа и отправки его сres.send
я получаю пустой объект как text/html
после проверки заголовков в почтальоне, хотя они отправляются как application/json