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
相关产品推荐
相关产品推荐

