在哪里放置MySQL连接以避免Node.js中的代码重复

时间:2017-12-16 23:44:07

标签: javascript node.js

我在Node.js中使用mysql模块。在我的模型文件中,目前,我在每个方法中指定连接常量。然而,这占用了很多空间,我知道它并不理想。

这就是它的样子。

doSomething: () => {

    var connection = mysql.createConnection({
        host     : config.database.host,
        database : config.database.database,
        user     : config.database.user,
        password : config.database.password
    });

    connection.query( ... );
    connection.destroy();

},



doSomethingElse: () => {

    var connection = mysql.createConnection({
        host     : config.database.host,
        database : config.database.database,
        user     : config.database.user,
        password : config.database.password
    });

    connection.query( ... );
    connection.destroy();


},

有人可以推荐一种方法来整理一下并减少冗余代码吗?

1 个答案:

答案 0 :(得分:0)

创建一次连接并将其传递给模块导出。

const mysql = require("mysql");

const conn = mysql.createConnection({
  host: "localhost",
  user: "root",
  password: "",
  database: "db"
});

module.exports = conn;

然后您可以将其导入其他文件并使用它。

var dbConnection = require('./dbConnection');

dbConnection.query();

但是,我建议不要使用createConnection,而是使用createPool

  

可以合并连接以简化单个连接的共享,或者   管理多个连接。

const mysql = require("mysql");

const conn = mysql.createPool({
  host: "localhost",
  user: "root",
  password: "",
  database: "db"
});

module.exports = conn;

你可以像这样使用它。从表中获取数据后,请确保release连接:

var connectionPool = require('./dbConnection');

connectionPool.getConnection((err, connection) => {
  connection.query('SELECT * FROM table', (error, result) {
    connection.release();
    if(error) throw error;
  });
});

关闭池中的所有连接:

connectionPool.end(function (err) {
  // all connections in the pool have ended
});