createConnection如何在mysql中使用nodeJS?

Kis*_*ány 4 node.js node-mysql node-modules

createConnection有什么作用?

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

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

这是我在我的authentication模块中的方式:

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

exports.login = function() ...
Run Code Online (Sandbox Code Playgroud)

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

谢谢你的回答.

Dav*_*ave 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
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)

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

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;
Run Code Online (Sandbox Code Playgroud)

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;
Run Code Online (Sandbox Code Playgroud)


Lar*_*tis 5

每次调用时它都会创建一个新连接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;
Run Code Online (Sandbox Code Playgroud)

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

var connection = require("./connection.js");
connection.query('some query', callback);
Run Code Online (Sandbox Code Playgroud)

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

  • 是,对的。您可以通过登录到 mysql shell 并运行`SHOW STATUS WHERE variable_name = "Threads_connected";`来自己验证这一点 (2认同)