Calling MySQL Stored Procedures from Node.js

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

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

  1. 连接到 MySQL 数据库服务器。
  2. 通过执行CALL spName语句来调用存储过程。 spName是存储过程的名称。
  3. 关闭数据库连接。

调用MySQL存储过程示例

为了进行演示,我们创建一个新的存储过程filterTodo来根据completed字段的值查询todos表中的行。

DELIMITER $$

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

DELIMITER ;
Code language: SQL (Structured Query Language) (sql)

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

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

CALL filterTodo(true);Code language: SQL (Structured Query Language) (sql)

该语句返回以下结果集:

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

Query OK, 0 rows affected (0.01 sec)Code language: JavaScript (javascript)

以下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();
Code language: JavaScript (javascript)

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

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

module.exports = config;
Code language: JavaScript (javascript)

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

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

让我们运行storedproc.js 程序。

> node storedproc.js
[ RowDataPacket { id: 4, title: 'It should work perfectly', completed: 1 } ]
Code language: JavaScript (javascript)

程序按预期显示 1 行。

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

本教程有帮助吗?