javascript - 使用 Node.js MySQL 库的正确方法是什么?
问题描述
目前我正在使用 Node.js 中的 MySQL 库,但是我对使用该库的正确/最有效方式有疑问。
根据 w3schools,进行单个查询的正确方法是使用这样的代码
var mysql = require('mysql');
var con = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
con.connect(function(err) {
if (err) throw err;
con.query("SELECT * FROM customers", function (err, result, fields) {
if (err) throw err;
console.log(result);
});
});
但是,假设我想进行多个查询,这些查询将由一个事件执行,例如我将如何处理这个?我应该创建一个“初始化”函数,该函数在程序运行后立即执行吗?
var mysql = require('mysql');
var database;
//Initialise database
function setupDatabase() {
database = mysql.createConnection({
host: token.host,
user: token.user,
password: token.password,
database: token.database,
port: token.port
});
}
//Imagine this could be called at any time after execution
function event() {
if(database != null) {
database.connect(function(err) {
if (err) throw err;
database.query("SELECT * FROM customers", function (err, result, fields) {
if (err) throw err;
console.log(result);
});
});
}
}
而且我每次进行查询时都必须连接到数据库,还是可以将“database.connect”调用添加到我的 setupDatabase 函数中,例如这样?
var mysql = require('mysql');
var database;
//Initialise database
function setupDatabase() {
database = mysql.createConnection({
host: token.host,
user: token.user,
password: token.password,
database: token.database,
port: token.port
});
if(database != null) {
database.connect(function(err) {
if (err) throw err;
});
}
}
//Imagine this could be called at any time after execution
function event() {
if(database != null) {
database.query("SELECT * FROM customers", function (err, result, fields) {
if (err) throw err;
console.log(result);
});
}
}
我主要担心的是每次进行查询时调用 con.connect 函数会很慢,尽管这些是异步的,但我希望尽可能使用正确/最有效的方式。请随时纠正我对最后两个代码片段的任何错误,到目前为止我只测试了第一个。
解决方案
您必须在每个应用程序 livetime 中只建立一次数据库连接(除非您有断开连接)。然后,您可以根据需要进行尽可能多的查询。
只需将数据库连接例程放在单独的文件中,然后在您的应用程序初始化步骤中要求它。
// mysql.js
const mysql = require('mysql');
module.exports = mysql.createConnection({
host: "localhost",
user: "yourusername",
password: "yourpassword",
database: "mydb"
});
或者在需要数据库连接的任何地方都需要它——它将返回连接的数据库对象,而无需一次又一次地重新运行该代码。
// inex.js
const databse = require('./mysql')
database.query("SELECT * FROM customers")
推荐阅读
- jenkins - 如何在Jenkins中使用变量将自定义消息添加到松弛?
- azure - 如何在 Azure 门户上调用 REST API
- react-intl - React-intl 自定义格式化程序
- typescript - Typescript – 设置数组界面中第一项和第二项的类型
- sql - 在 Toad/Oracle 中创建用于练习的数据库?
- android - Kotlin/Android:递归查找所有类型 T 的视图
- python - 将内存中的 OpenCV 图像写入 BytesIO 或 Tempfile
- php - dyld library not loaded - PHP, Laravel, Composer command line commands not working
- c# - (Unity C#) Directory.CreateDirectory() 不应该创建文件夹
- java - 返回 JSP 视图名称时让我的 Spring Boot 索引页面和控制器映射工作的问题