首页 > 解决方案 > 使用 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 函数会很慢,尽管这些是异步的,但我希望尽可能使用正确/最有效的方式。请随时纠正我对最后两个代码片段的任何错误,到目前为止我只测试了第一个。

标签: javascriptmysqlnode.js

解决方案


您必须在每个应用程序 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")

推荐阅读