axios post 请求挂在有效请求上
Posted
技术标签:
【中文标题】axios post 请求挂在有效请求上【英文标题】:axios post request hangs on valid requests 【发布时间】:2019-07-23 06:28:19 【问题描述】:我在我的 nodejs 应用程序中使用 axios 向另一个服务发送请求。 当我发送请求并得到 5xx 或 4xx 错误代码作为响应时 - axios 会很好地处理请求并将错误返回给客户端。 当请求结构良好时,它只是挂起,并且 axios 发送的承诺永远不会解析,让客户端无限期地挂起等待响应。 我不知道是什么导致只有有效的请求挂起,或者如何进一步调试。 到目前为止我尝试过的事情 -
使用邮递员发送请求(失败和有效) - 它们按预期返回错误代码和 OK 代码。 在 VScode 中调试节点进程,我可以看到 axios 在内部无限循环,等待 promise 解决,但我还没有理解是什么让 promise 无法解决。 axios 版本有点过时,所以我尝试更新它,但这产生了新问题,所以我决定将其拨回原始版本。有关应用程序版本的一些信息,如果相关 -
节点版本 - v9.11.1 axios 版本 - 0.9.1axios 请求的片段,出于安全原因编辑 -
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);
);
);
【问题讨论】:
您确定要发布到其他服务吗?axios.post('/'+req.body.route+'...
也许你在同一个服务上发帖,并与你的快速路由器循环?
我很肯定。正如您所见,当我定义 axios 时,其他服务是在 baseURL 中定义的,就像我写的那样 - 如果请求格式错误或无效,我将从其他服务获得预期的 4xx。
如果您可以控制其他服务,您是否尝试过记录请求的标头以发现 axios 调用和 postman 调用之间的差异?
我一直在努力避免它,因为其他服务是遗留服务并且对其的可见性不是很好,但我想是时候脱掉孩子的手套了。谢谢。
或者您可以设置一个间谍来监视您计算机上的传出请求。祝你好运!
【参考方案1】:
面临类似的问题。 Axios 会卡在实例(请求)步骤中。将 URL 中的 https 替换为 http 解决了该问题。
【讨论】:
【参考方案2】:对我来说,使用 https://www.npmjs.com/package/axios-request-throttle 后它起作用了
static myFynction(urls): void
axiosThrottle.use(axios,
requestsPerSecond: 2
);
const getUrls = [];
urls.forEach((url: string) =>
const axiosCall = axios(
method: 'GET',
headers:
...
,
url: url,
)
.then((response) =>
return response.status;
)
.catch((error) =>
return error.message;
);
getUrls.push(axiosCall);
);
const responses = browser.call(async () => await Promise.all(getUrls));
【讨论】:
感谢 sn-p。就像我说的那样 - 在我的案例中,这最终成为处理 axios 响应的代码的问题。很高兴知道您也找到了解决方案。【参考方案3】:这个问题的答案是 axios 已经按预期解决了 Promise,在我的程序的客户端没有任何迹象,只有错误在表单中正确显示。
我添加了 2xx 响应的指示,现在一切都恢复正常了。
【讨论】:
你到底做了什么? 能否请您发布您的解决方案?以上是关于axios post 请求挂在有效请求上的主要内容,如果未能解决你的问题,请参考以下文章
Angular http post 请求失败,但 axios 1 有效
axios post请求和JQuery $ .ajax请求都是在移动设备上返回403禁止错误