You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.03 10:48:03