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

如何在Express路由中调用其他第三方REST API接口

实现Express路由转发请求到外部API的方案

首先确保你的Express应用已经注册了express.json()中间件,用于解析JSON格式的请求体:

// 项目入口文件(如app.js)中提前配置
app.use(express.json())

方案1:使用Node.js 18+ 内置fetch(无额外依赖)

Node.js 18及以上版本内置了Web标准的fetch API,无需安装第三方包即可直接使用:

// 路由回调添加async关键字支持异步await操作
router.post('/CreateTicket', cors(corsOptions), async function(req, res, next) {
  try {
    // 替换为实际的外部工单API地址
    const externalApiUrl = 'https://外部API的实际调用地址'
    // 发起POST请求直接转发当前请求的body
    const externalResponse = await fetch(externalApiUrl, {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
        // 外部API需要鉴权时在这里加对应请求头,示例:
        // 'Authorization': 'Bearer 你的鉴权令牌'
      },
      body: JSON.stringify(req.body)
    })
    // 处理外部API返回的错误状态码
    if (!externalResponse.ok) {
      return res.status(externalResponse.status).send(await externalResponse.text())
    }
    // 解析外部API返回的JSON结果直接返回给调用方
    const result = await externalResponse.json()
    res.send(result)
  } catch (error) {
    // 处理网络异常、超时等错误
    res.status(500).send({
      error: '调用外部工单接口失败',
      message: error.message
    })
  }
})

方案2:使用axios实现(适配低版本Node/复杂请求场景)

如果Node版本低于18,或者需要更便捷的请求配置能力,可以用axios实现:

  1. 首先安装依赖:
    npm install axios

  2. 路由代码:

const axios = require('axios')

router.post('/CreateTicket', cors(corsOptions), async function(req, res, next) {
  try {
    const externalApiUrl = 'https://外部API的实际调用地址'
    // axios自动序列化JSON请求体,无需手动调用JSON.stringify
    const { data } = await axios.post(externalApiUrl, req.body, {
      headers: {
        // 按需添加鉴权头
        // 'Authorization': 'Bearer 你的鉴权令牌'
      },
      timeout: 10000 // 配置10秒超时,避免请求挂起
    })
    res.send(data)
  } catch (error) {
    // 兼容外部API返回的错误信息
    const errorMsg = error.response?.data || error.message
    res.status(error.response?.status || 500).send({
      error: '调用外部工单接口失败',
      message: errorMsg
    })
  }
})

核心注意事项

  • 服务器发起外部请求不存在浏览器跨域限制,无需额外处理跨域配置
  • 如果需要转发当前请求的指定头信息(比如用户鉴权凭证),可手动提取req.headers中对应的字段,添加到外部请求的headers中
  • 必须确保Express全局注册了express.json()中间件,否则无法正确解析req.body内容

内容的提问来源于stack exchange,提问作者JCrew0

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 05:06:03