createConnection如何在mysql中使用nodeJS?

时间:2016-10-20 11:24:21

标签: node.js node-modules node-mysql

createConnection做什么?

var connection = mysql.createConnection({
  host     : 'example.org',
  user     : 'bob',
  password : 'secret'
});

我正在使用mysql模块在nodeJS中编写应用程序。我有一些自己的模块,例如authentication,它们定义需要数据库连接。问题是:如果我有多个模块,我使用此方法创建连接,它是否每次都为我创建一个新连接或使用第一个?如果创建,它会在第一次加载我自己的模块时创建或每次创建?哦,如果它创造什么时候它会被摧毁?

以下是我在authentication模块中的说明:

var config = require('./config.js');
var mysql = require('mysql');
var connection = mysql.createConnection(config.connectionString);

exports.login = function() ...

我对模块和自己的模块如何工作有一些基本的了解。

感谢您的回答。

2 个答案:

答案 0 :(得分:6)

您可以在一个模块中创建连接池,然后在所有模块中共享该池,并在需要时调用pool.getConnection()。这可能比保持单个共享连接始终打开更好。

我正在研究的一个项目是:

utils的/ database.js

var mysql = require('mysql');

var pool = mysql.createPool({
    connectionLimit: 100,
    host: 'localhost',
    user: 'xxxxx',
    password: 'yyyyy',
    database: 'zzzzz',
    debug: false
});

module.exports = pool

accounts.js

var express = require('express');
var router = express.Router();

var pool = require('./utils/database');

router.get('/', function(req, res) {

    pool.getConnection(function(err, connection) {

        // do whatever you want with your connection here

        connection.release();

    });
});

module.exports = router;

我正在玩的另一种方式是:

utils的/ database.js

var mysql = require('mysql');

var pool = mysql.createPool({
    connectionLimit: 100,
    host: 'localhost',
    user: 'xxxxx',
    password: 'yyyyy',
    database: 'zzzzz',
    debug: false
});

var getConnection = function(callback) {
    pool.getConnection(function(err, connection) {
        callback(err, connection);
    });
});

module.exports = getConnection;

accounts.js

var express = require('express');
var router = express.Router();

var createConnection = require('./utils/database');

router.get('/', function(req, res) {

    createConnection(function(err, connection) {

        // do whatever you want with your connection here

        connection.release();

    });
});

module.exports = router;

答案 1 :(得分:3)

每次拨打connection.connect()时,都会创建一个新连接。 程序退出或调用connection.end()时会破坏连接。如果要重用连接,可以将连接逻辑放在单独的模块中,然后直接导出连接,就像这样。

在名为connection.js的文件中

var mysql = require("mysql");
var connection = mysql.createConnection({
  host     : 'localhost',
  user     : 'user',
  password : 'password'
});
connection.connect();
module.exports = connection;

然后在任何客户端文件中:

var connection = require("./connection.js");
connection.query('some query', callback);

需要connection.js的每个文件都将重用现有连接。