Express API中MySQL查询结果赋值JS变量返回空数组问题
问题原因及解决方法
核心问题
你的代码存在两个关键问题:
test函数没有返回创建的Promise对象,导致await test()实际拿到的是undefined(async函数默认返回resolved状态的Promise,值为undefined)- 未处理MySQL查询的错误情况,若查询出错,
result可能为空或undefined,且没有触发reject逻辑
修正后的代码
app.get('/api/get/db', async (req, res) => { // 包装con.query为Promise function test() { return new Promise((resolve, reject) => { con.query("SELECT * FROM `temp`", (err, result) => { // 错误优先处理 if (err) { return reject(err); } resolve(result); }); }); } try { const data = await test(); res.status(200).json({ data }); } catch (err) { // 处理查询错误,返回错误信息 res.status(500).json({ error: err.message }); } })
更简洁的写法(推荐)
可以用Node.js内置的util.promisify把回调风格的con.query转成Promise风格,避免手动封装:
const util = require('util'); // 把con.query转成Promise版本 const queryAsync = util.promisify(con.query).bind(con); app.get('/api/get/db', async (req, res) => { try { const data = await queryAsync("SELECT * FROM `temp`"); res.status(200).json({ data }); } catch (err) { res.status(500).json({ error: err.message }); } })
额外注意点
- 变量
data必须用const/let声明,避免全局变量污染 - 一定要添加错误捕获逻辑(
try/catch),否则查询出错时会导致请求挂起或服务器崩溃 - 确保数据库连接
con已正常建立,若连接失败,查询也会返回空或报错
内容的提问来源于stack exchange,提问作者shahin davoodi
相关产品推荐
相关产品推荐

