如何在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实现:
首先安装依赖:
npm install axios路由代码:
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
相关产品推荐
相关产品推荐

