createConnection 如何与 mysql 中的 nodeJS 一起使用?
how does createConnection work with nodeJS in 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() ...
我对模块和自己的模块的工作原理有一些基本的理解缺失。
感谢您的回答。
它会在您每次调用 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 将重用现有连接。
您可以在一个模块中创建一个连接池,然后在所有模块之间共享该池,并在需要时调用 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;
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() ...
我对模块和自己的模块的工作原理有一些基本的理解缺失。
感谢您的回答。
它会在您每次调用 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 将重用现有连接。
您可以在一个模块中创建一个连接池,然后在所有模块之间共享该池,并在需要时调用 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;