2016-10-20 3 views
1

Что делает createConnection?Как createConnection работает с nodeJS в mysql?

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

Я пишу приложение в nodeJS с использованием модуля mysql. У меня есть некоторые собственные модули, например authentication, которые, безусловно, нуждаются в подключении к БД. Вопрос: если у меня есть несколько модулей, где я использую этот метод для создания соединения, будет ли он создавать новое соединение для меня каждый раз или использовать первый? Если он создается, он создает первый раз, когда он загружает мой собственный модуль или каждый раз? О, и если это создаст, когда оно будет уничтожено?

Вот как я его в моем authentication модуле:

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

exports.login = function() ... 

У меня есть некоторые базовые понимание missings о том, как модули и собственные модули работы.

Спасибо за ответы.

ответ

2

Вы можете создать пул соединений в одном модуле, а затем поделиться этим пулом по всем вашим модулям, вызвав pool.createConnection(), когда вам нужно. Это может быть лучше, чем поддерживать единое общее соединение, открытое все время.

Один проект я работаю над делает это:

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.createConnection(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; 
+0

Ограничение соединения 100 означает 100 одновременных соединений? Спасибо – Marin

+1

Да. https://github.com/mysqljs/mysql#pool-options – Dave

2

Он будет создавать новое соединение каждый раз, когда вы звоните 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 будет повторно использовать существующее соединение.

+0

так, если я ставлю саму связь в отдельном модуле, всякий раз, когда я использую соединение (даже в разных модулях, требуя его) он не сделает другой пример, так что будет только один? –

+1

есть, правильный. Вы можете проверить это самостоятельно, войдя в оболочку mysql и запустив 'SHOW STATUS WHERE variable_name =" Threads_connected ";' –