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

Express.js中Axios返回Promise { undefined }问题求助

问题解决步骤

1. 修复loadDataPesan函数的异步返回问题

你的loadDataPesan函数虽然加了async,但内部没有返回axios请求的Promise,同时混用async/await与.then/.catch导致返回值异常。修改后的代码如下:

const axios = require('axios');

async function loadDataPesan(opts) {
  try {
    // 注意:URL必须补全协议(如http://),否则请求会失败
    const response = await axios.get('http://localhost/getData', {
      params: {
        opt: opts,
        nis: "123123",
      }
    });
    console.log(response.data.datas);
    return response.data.datas;
  } catch (error) {
    console.error(error);
    return error;
  }
}

module.exports = { loadDataPesan };

2. 修复路由中的异步调用问题

Express路由回调需要处理异步逻辑,你需要给回调函数加上async,并用await获取loadDataPesan的返回值,否则直接得到的是未完成状态的Promise对象。修改后的app.js路由部分:

app.get('/contact', async (req, res) => {
    const contacts = loadContact();
    // 用await等待异步函数返回实际数据
    const dataaxio = await loadDataPesan("SUBS","912830123");

    console.log(dataaxio); // 现在能打印正确数据
    
    res.render('contact', { 
        layout: 'layouts/main-layout',
        title: 'Halaman Contact',
        contact: contacts,
        dataaxio: dataaxio // 如需将数据传给模板,记得添加此字段
    });
})

关键错误点说明

  • 原函数未返回axios请求的Promise,async函数若无return值,默认返回Promise.resolve(undefined);改用await并返回响应数据后,才能正确返回包含目标数据的Promise。
  • 调用异步函数时,必须在async函数内部用await,或通过.then()处理,否则直接得到的是Promise对象而非实际数据。
  • axios请求URL必须包含协议(http/https),否则会被当作相对路径处理,导致请求失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 16:05:19