Express+Node.js嵌套微服务API调用错误透传方案咨询
解决方案
问题根因
axios调用下游接口时,只要返回非2xx的状态码就会抛出错误,下游返回的自定义状态码、响应体不会直接挂载在错误对象根节点,而是统一存放在error.response属性下,你当前直接返回整个error对象,只能拿到axios默认封装的通用错误提示,无法获取service2返回的自定义内容。error.response包含3个核心字段:
status:下游返回的HTTP状态码data:下游返回的响应体内容headers:下游返回的响应头
代码修改(service1.js)
只需要调整catch块的逻辑,优先从error.response中取下游返回的内容透传即可:
app.post('/createAdminAgent', async (req, res) => { let body = req.body; try { const response_createAgentFirebase = await axios.post(service2URL + '/createAgent', req.body); const response_createAgentBDD = await axios.post(service3URL + '/createEnterpriseAndAdminAgent', req.body); res.status(200).send(response_createAgentBDD.data); } catch (error) { // 优先处理有下游响应的错误场景 if (error.response) { const { status, data } = error.response; // 透传下游返回的状态码和响应体,包含你需要的401和用户已存在提示 res.status(status).send(data); } else { // 处理无下游响应的异常:比如网络不通、请求超时等 res.status(500).send({ status: 500, error: '服务调用异常,请稍后重试' }) } } });
修改后service2返回的401状态码、User already exist in system错误信息就会完整透传到前端。
内容的提问来源于stack exchange,提问作者Aday Perera
相关产品推荐
相关产品推荐

