从Node.js调用MySQL存储过程

时间:2019-11-20 08:52:40  来源:igfitidea点击:

简介:在本教程中,您将学习如何从Node.js应用程序中调用MySQL中的存储过程。

调用存储过程的步骤类似于执行查询的步骤,如下所示:

  • 连接到MySQL数据库服务器。

  • 通过执行CALL spName语句来调用存储过程。
    spName是存储过程的名称。

  • 关闭数据库连接。

调用MySQL存储过程示例

为了演示,我们创建了一个新的存储过程filterTodo,以基于完成字段的值查询todos表中的行。

DELIMITER $$

CREATE PROCEDURE `filterTodo`(IN done BOOLEAN)
BEGIN
    SELECT * FROM todos WHERE completed = done;
END$$

DELIMITER ;

存储过程filterTodo基于done参数返回todos表中的行。
如果done参数为true,则返回所有已完成的待办事项,否则返回未完成的待办事项。

如您所知,要在MySQL中调用存储过程,可以使用CALL语句。
例如,要调用filterTodo存储过程,请执行以下语句:

CALL filterTodo(true);

该语句返回以下结果集:

+----+--------------------------+-----------+
| id | title                    | completed |
+----+--------------------------+-----------+
|  4 | It should work perfectly |         1 |
+----+--------------------------+-----------+
1 row in set (0.00 sec)

Query OK, 0 rows affected (0.01 sec)

以下storedproc.js程序调用filterTodo存储过程并返回结果集:

let mysql = require('mysql');
let config = require('./config.js');

let connection = mysql.createConnection(config);

let sql = `CALL filterTodo(?)`;

connection.query(sql, true, (error, results, fields) => {
  if (error) {
    return console.error(error.message);
  }
  console.log(results[0]);
});

connection.end();

请注意,该程序使用了config.js模块,该模块存储数据库的信息:

let config = {
  host    : 'localhost',
  user    : 'root',
  password: '',
  database: 'todoapp'
};

module.exports = config;

在CALL语句中,我们使用占位符(?)将数据传递到存储过程。

当我们在连接对象上调用query()方法时,我们将done参数的值作为query()方法的第二个参数传递。

让我们运行storedproc.js程序。

> node storedproc.js
[ RowDataPacket { id: 4, title: 'It should work perfectly', completed: 1 } ]

该程序按预期显示了1行。

在本教程中,您学习了如何从Node.js程序中调用MySQL中的存储过程。