axios发布请求挂在有效请求上

时间:2019-03-01 08:49:30

标签: javascript node.js axios

我在我的nodejs应用程序中使用axios将请求发送到另一个服务。
当我发送请求并获得5xx或4xx错误代码作为响应时-axios可以很好地处理请求并将错误返回给客户端。
当请求的结构合理时,它只会挂起,而axios发送的承诺将永远无法解决,从而使客户端无限期地挂起等待响应。
我不知道是什么导致仅有效请求挂起,或者如何进一步调试它。
到目前为止我尝试过的事情-

  • 使用邮递员发送请求(失败和有效)-它们按预期返回错误代码和OK代码。
  • 在VScode中调试节点进程,我可以看到axios在内部无限循环,等待诺言得以解决,但我还没有理解是什么使诺言无法得到解决。
  • axios版本有些过时,因此我尝试对其进行更新,但是这带来了新问题,因此我决定将其恢复为原始版本。

有关应用版本的一些信息(如果相关)-

  • 节点版本-v9.11.1
  • axios版本-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);
        });
});

2 个答案:

答案 0 :(得分:1)

面临类似问题。 Axios会陷入实例(请求)步骤。用URL中的 http 替换 https 可以解决此问题。

答案 1 :(得分:0)

此问题的答案是axios一直在按预期方式兑现承诺,在我的程序的客户端上没有任何指示,只在表格中正确指出了错误。

我添加了2xx响应的指示,现在一切恢复正常。