Node.js调用MySQL存储过程返回undefined问题排查
问题
使用Node.js、Express和MySQL开发时,创建的存储过程在MySQL Workbench中调用能返回正确结果,但在Node中调用返回undefined值。
存储过程代码:
DELIMITER // CREATE PROCEDURE Read_Categories_SP() BEGIN SELECT CategoryID, CategoryName FROM Categories ORDER BY CategoryName; END // DELIMITER ;
在MySQL Workbench中执行该过程得到结果:
2 ARIA
1 IT
3 Workshop
Node中的调用代码:
// 此代码无效 const [result1] = await mysqldb.pool.query('CALL Read_Categories_SP'); // 此代码有效 const [result2] = await mysqldb.pool.query('SELECT * FROM Categories');
请问哪里操作出错了?
解决办法
问题出在存储过程的调用语法上——你写的CALL Read_Categories_SP缺少了括号,MySQL要求存储过程调用必须带括号,哪怕没有参数。
修正后的Node调用代码:
const [result1] = await mysqldb.pool.query('CALL Read_Categories_SP()');
另外,使用mysql2库调用存储过程时,返回的结果是嵌套数组结构,需要进一步解析才能拿到实际查询数据:
const [results] = await mysqldb.pool.query('CALL Read_Categories_SP()'); const categories = results[0]; // 这里才是存储过程返回的查询结果集
内容的提问来源于stack exchange,提问作者kbdev
相关产品推荐
相关产品推荐

