Node.js多SQL查询渲染HBS模板失败问题求助
解决Node.js多SQL查询结果获取错误的问题
我来帮你搞定这个问题!你遇到的第二个查询返回FieldPacket而不是实际数据的问题,核心原因是误解了mysql模块多语句查询的回调参数结构。
问题分析
当你开启multipleStatements: true执行多SQL语句时,conn.query的回调函数里:
- 第二个参数
results是一个数组,每个元素对应一个查询的结果集(也就是你要的实际数据) - 第三个参数
fields是所有查询的字段元数据数组(就是你看到的FieldPacket列表)
你之前的代码把第三个参数命名为survey,错误地把字段元数据当成了第二个查询的结果,这才导致日志输出的不是实际数据。
修正后的代码
app.get('/',(req, res, next) => { let sql = "SELECT * FROM employee; SELECT * FROM data_survey"; conn.query(sql, (err, results, fields)=>{ if(err) throw err; // results[0]对应第一个查询(employee表)的结果 // results[1]对应第二个查询(data_survey表)的结果 res.render('index',{ data1: results[0], data: results[1] }); console.log(results[1]); // 现在会输出第二个查询的实际数据 }); });
额外确认点
再检查下你的数据库连接配置,确保multipleStatements确实已经正确开启(你提到已经配置了,但再确认一遍更稳妥):
const mysql = require('mysql'); const conn = mysql.createConnection({ host: '你的数据库地址', user: '数据库用户名', password: '数据库密码', database: '目标数据库名', multipleStatements: true // 必须开启这个选项才能执行多语句查询 });
这样修改后,第二个查询的实际数据就能正确传递到HBS模板里,日志也会输出你期望的内容啦!
内容的提问来源于stack exchange,提问作者pratama nidhi
相关产品推荐
相关产品推荐

