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

Express路由调用独立文件封装的Axios逻辑返回undefined如何解决

核心问题说明:你封装的inventoryRequest函数没有返回任何值,axios的.then()里的return只是回调函数的返回值,不会作为外层函数的返回结果;同时axios请求是异步操作,必须等待异步执行完成才能拿到返回值。

第一步:修正抽离的请求工具函数

修改./lib/inventory-request.js代码,要么直接返回axios生成的Promise对象,要么用async/await简化异步逻辑:

const axios = require('axios').default;
const base_api_url = 'some_url';

// 写法1:async/await 写法(更易读,推荐)
module.exports = async function(){
  const headers = {
    "Content-Type": "application/graphql"
  }
  const data = `{}`

  try {
    const response = await axios.post(base_api_url, data, { headers })
    return response.data
  } catch (error) {
    return 'no'
  }
};

// 写法2:直接返回Promise(和你原有写法兼容性更高)
/*
module.exports = function(){
  const headers = {
    "Content-Type": "application/graphql"
  }
  const data = `{}`

  // 重点:外层函数返回axios的Promise对象
  return axios.post(base_api_url, data, {
    headers: headers
  })
  .then((response) => {
    return response.data
  })
  .catch((error) => {
    return 'no'
  })
};
*/
第二步:修正路由调用逻辑

路由处理函数需要标记为async,用await等待异步请求完成后再取值:

// 先引入封装好的请求函数
const inventoryRequest = require('./lib/inventory-request')

server.post('/inventory-request', async (req, res) => {
  // 等待异步请求执行完成再取值
  const inventoryData = await inventoryRequest()
  console.log(inventoryData)
  // 注意必须给请求方返回响应,否则接口会超时
  res.send(inventoryData)
})
补充规范说明
  • 所有异步IO操作(网络请求、数据库读写等)封装为工具函数时,必须返回Promise对象或声明为async函数
  • 调用异步函数需要获取返回值时,必须在async函数内使用await关键字,或通过.then()链式回调取值
  • 生产环境建议给路由添加全局异常捕获,避免未处理的异步错误导致服务进程崩溃

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 05:15:03