Есть несколько проблем с этой реализацией. Первая проблема заключается в том, что вы забыли вернуть свои обещания, чтобы они применялись к цепочке обещаний. Если вы не вернете обещание, ошибки не будут распространяться вверх по цепочке обещаний, что противоречит цели обещаний. Вторая проблема заключается в том, что вы пытаетесь отправить ответ дважды, один раз в ResponseUtil.callService(res, url)
и в другой раз непосредственно после этого (например, res.send({});
).
Ошибки консоли указывают на обе эти ошибки:
1) Невыполнение обещаний
(узел: 5548) UnhandledPromiseRejectionWarning: необработанное отклонение обещания (идентификатор отклонения: 1): ошибка: невозможно установить заголовки после их отправки.
2) Повторный вызов res.send
экспресс устаревший res.send (статус, тело): используйте res.status (статус) .send (тело) вместо server \ services \ utils \ ResponseUtil.js: 56: 30
Я собираюсь сделать предположение, что ResponseUtil.callService(res, url)
возвращает обещание ответить на этот вопрос, так как кажется, что это так.
axios.get(AppConstants.GET_JWT_TOKEN_URL, {
auth: {
username: credentials.auth.racfId,
password: credentials.auth.password
}
}).then((jwtResponse) => {
// Return the promise from get so it is applied to the promise chain
return axios.get(formatUrl, {
headers: {
"Authorization": `Bearer ${jwtResponse.data.jwt}`,
"Content-Type": 'application/json'
}
}).then((response) => {
const file = Buffer.from(response.data.content, 'base64');
const fileType = mime.contentType(response.data.contentInfo.fileType);
const fileExtension = response.data.contentInfo.fileType.toLowerCase();
const fileName = `filename=${response.data.contentInfo.id}.${fileExtension}`;
// Return the promise from call service so it is applied to the promise chain
return ResponseUtil.callService(res, url);
});
}).catch((e) => {
// Catch any error that occurred in the promise chain...
if (e.response) {
return res.status(e.response.status).send(e.response.data);
}
return res.status(500).send(e.message || 'Something wrong');
});