Я использую axios в своем приложении nodejs для отправки запросов другому сервису.
Когда я отправляю запрос и получаю в ответ коды ошибок 5xx или 4xx - axios хорошо обрабатывает запрос и возвращает ошибку клиенту.
Когда запрос хорошо структурирован, он просто зависает, и отправка axios обещаний никогда не разрешается, а клиент зависает на неопределенный срок в ожидании ответа.
Я не знаю, из-за чего зависают только действительные запросы или какдальнейшая отладка.
То, что я до сих пор пробовал -
- Отправка запросов (как неудачных, так и действительных) с помощью почтальона - они возвращают коды ошибок и коды ОК, как и ожидалось.
- Отладка процесса узла в VScode, я вижу, что axios внутренне зацикливается неопределенно долго, ожидая разрешения обещания, но я пока не понимаю, что мешает разрешению обещания.
- версия axios немногоустарел, поэтому я попытался обновить его, но это создало новые проблемы, поэтому я решил вернуться к исходной версии.
Некоторая информация о версиях приложения, в случае необходимости -
- версия узла - v9.11.1
- axios verion - 0.9.1
Фрагмент запроса axios, отредактированный по соображениям безопасности -
const Router = require('express').Router;
const router = Router();
const axios = require('axios').create({
baseURL: 'https://some-service.com'
});
const auth-handler = require('auth-handler');
router.post('/', (req, res) => {
auth-handler.getToken('token-name')
.then(token => {
const body = {
subject: "subject",
body: "body"
};
const options = {
headers: {
'Authorization': 'Bearer ' + token,
'Content-Type': 'application/json'
}
};
return axios.post('/'+req.body.route+'/endpoint?foo=bar', body, options);
})
.then(response => res.status(response.status).send(response.data))
.catch(error => {
console.error(error);
res.status(error.status).send(error.data);
});
});