2016-10-20 3 views
1

Was macht createConnection?Wie funktioniert createConnection mit nodeJS in mysql?

Ich schreibe eine Anwendung in NodeJS mit mysql-Modul. Ich habe einige eigene Module, zum Beispiel authentication, die definitiv DB-Verbindung benötigt. Die Frage ist: Wenn ich mehrere Module habe, in denen ich diese Methode benutze, um die Verbindung zu erstellen, wird sie für mich jedes Mal eine neue Verbindung erstellen oder die erste verwenden? Wenn erstellt, erstellt es das erste Mal, dass es mein eigenes Modul oder jedes Mal lädt? Oh, und wenn es entsteht, wann wird es zerstört werden?

Hier ist, wie ich es in meinem authentication Modul:

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

exports.login = function() ... 

Ich habe einige grundlegende Verständnis Missings darüber, wie Module und eigene Module arbeiten.

Danke für die Antworten.

Antwort

2

Sie können einen Verbindungspool in einem Modul erstellen und diesen Pool dann für alle Ihre Module freigeben, indem Sie pool.createConnection() aufrufen, wann immer Sie möchten. Das ist vielleicht besser, als eine einzelne, geteilte Verbindung die ganze Zeit offen zu halten.

Ein Projekt arbeite ich an tut dies:

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; 

Eine andere Möglichkeit, ich spiele um mit ist wie folgt:

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

Das Verbindungslimit 100 bedeutet 100 gleichzeitige Verbindungen? Danke – Marin

+1

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

2

Es wird jedes Mal eine neue Verbindung erstellt, wenn Sie connection.connect() anrufen. Die Verbindung wird zerstört, wenn entweder das Programm beendet wird oder connection.end() aufgerufen wird. Wenn Sie die Verbindung wiederverwenden möchten, können Sie die Verbindungslogik in ein separates Modul einfügen und dann einfach die Verbindung selbst exportieren.

In einer Datei namens connection.js

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

Und dann in einer beliebigen Client-Datei:

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

Jede Datei der connection.js die bestehende Verbindung wird Wiederverwendung erfordert.

+0

so, wenn ich die Verbindung setzte sich in einem separaten Modul, wenn ich Verbindung verwenden (auch in verschiedenen Modulen durch die Forderung, es) wird es nicht machen ein anderes Beispiel, also wird es nur eines geben? –

+1

ja, richtig. Sie können dies selbst überprüfen, indem Sie sich in die mysql-Shell einloggen und 'SHOW STATUS WHERE Variablenname =" Threads_connected "ausführen;' –