Nodejs中用async/await调用pool.query无法获取MySQL查询结果求助
问题原因
你使用的mysql库原生仅支持回调风格API,没有内置Promise适配,直接对pool.query()使用await不会等待查询执行返回结果,只会返回库内部的Query实例对象,也就是你打印输出的内容。
解决方案
方案1:更换为mysql2库(推荐)
mysql2完全兼容mysql的所有API,同时原生支持Promise语法,改动成本极低:
- 安装依赖:
npm install mysql2 - 将数据库连接部分的引入逻辑替换为
mysql2/promise即可,原有创建连接池、查询的逻辑不需要改动:
// 替换原有引入mysql的代码 const mysql = require('mysql2/promise') // 原有创建连接池的逻辑保持不变 const pool = mysql.createPool({ // 你的数据库配置项 })
修改完成后你现有的query函数就可以正常返回查询结果。
方案2:手动封装Promise适配
如果你不想更换依赖,可以手动将查询方法封装为Promise形式:
const query = async (table, fields ) => { try { return new Promise((resolve, reject) => { pool.query('SELECT * FROM country limit 1', (error, results) => { if (error) return reject(error) resolve(results) }) }) } catch(err) { throw err } }
注:原有代码中你在catch块直接return err,会导致上层await无法感知异常,建议改为throw err,上层通过try catch捕获错误即可。
内容的提问来源于stack exchange,提问作者Sivagopal Manpragada
相关产品推荐
相关产品推荐

