почтовый запрос axios зависает на действительных запросах - PullRequest
0 голосов
/ 01 марта 2019

Я использую 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);
        });
});

1 Ответ

0 голосов
/ 01 марта 2019

Ответ на этот вопрос заключается в том, что axios выполнил обещания, как и ожидалось, на клиентской стороне моей программы это просто не было указано, только ошибки были правильно указаны в форме.

Я добавил индикацию для ответов 2xx, и теперь все снова хорошо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...