使用async/await调用MariaDB仍返回undefined,查询结果无法传递
问题本质
你遇到的问题核心是getSensorData()函数没有返回数据库查询的结果。虽然函数内部能通过控制台打印出数据,但没通过return语句把结果传递给外部调用者,所以外部用await接收时自然得到undefined。
修复方案
根据你的数据库代码风格,对应两种修复方式:
1. 回调风格的数据库操作(需包装为Promise)
如果你的查询用的是回调函数,必须把整个逻辑包装成Promise,在回调里通过resolve返回结果:
function getSensorData() { return new Promise((resolve, reject) => { // 示例数据库查询代码 db.query('SELECT * FROM sensor_data', (err, results) => { if (err) { console.error(err); reject(err); return; } console.log(results); // 内部打印结果 resolve(results); // 关键:把结果返回给调用者 }); }); }
2. Promise/async风格的数据库操作
如果用的是支持Promise的MariaDB库(比如官方mariadb包),直接return查询结果即可:
async function getSensorData() { try { const conn = await db.getConnection(); const results = await conn.query('SELECT * FROM sensor_data'); conn.release(); console.log(results); // 内部打印结果 return results; // 关键:返回结果 } catch (err) { console.error(err); throw err; // 抛出错误让路由层处理 } }
路由调用示例
修复后,路由里就能正常获取数据并渲染视图了:
app.get('/sensor', async (req, res) => { try { const sensorData = await getSensorData(); res.render('sensor-page', { data: sensorData }); } catch (err) { res.status(500).send('数据获取失败'); } });
内容的提问来源于stack exchange,提问作者Ringo
相关产品推荐
相关产品推荐

