如何让Mysql2-Node.js直接返回{列名:值}形式的对象结果?
在Node.js的Mysql2中直接获取列名对应值的对象结果
方案1:使用Mysql2的Promise API(推荐)
Mysql2的Promise版本默认返回以列名为键的对象数组,无需手动转换。直接通过await获取查询结果,取第一个元素就是你需要的格式:
const mysql = require('mysql2/promise'); async function fetchUser() { // 建立数据库连接 const conn = await mysql.createConnection({ host: 'localhost', user: '你的用户名', password: '你的密码', database: '你的数据库名' }); // 执行查询,直接获取对象数组 const [rows] = await conn.execute('SELECT * FROM USER LIMIT 1'); // 取出第一条数据,即为{列名: 值}格式 const targetUser = rows[0]; console.log(targetUser); // { Name: 'Kshitij', Age: 22 } await conn.end(); } fetchUser();
方案2:回调模式下显式配置结果格式
如果仍使用回调方式,可在创建连接时显式指定rowsAsArray: false(默认值即为false,若你的环境返回数组格式可强制设置),查询返回的rows会直接是对象数组:
const mysql = require('mysql2'); const conn = mysql.createConnection({ host: 'localhost', user: '你的用户名', password: '你的密码', database: '你的数据库名', rowsAsArray: false // 确保返回对象而非数组格式 }); conn.query('SELECT * FROM USER LIMIT 1', (err, rows) => { if (err) throw err; const targetUser = rows[0]; console.log(targetUser); // { Name: 'Kshitij', Age: 22 } conn.end(); });
方案3:快速转换现有[columns, rows]结构
如果已经拿到了[columns, rows]格式的结果(rows为二维数组),可以用reduce快速生成目标对象,无需手动循环:
// 假设yourQueryResult是查询返回的[columns, rows]结构 const [columns, rows] = yourQueryResult; const targetUser = columns.reduce((obj, col, idx) => { obj[col.name] = rows[0][idx]; return obj; }, {}); console.log(targetUser); // { Name: 'Kshitij', Age: 22 }
内容的提问来源于stack exchange,提问作者Kshitij Kurandwad
相关产品推荐
相关产品推荐

