closures连接MySQL Node.js

我正在开发一个ExpressJS和MySQL的Node应用程序。 我正在使用这个模块https://github.com/felixge/node-mysql/ ,我正在学习它的使用呢。 我遇到了如何正确closures连接的麻烦。

这就是我所做的:

app.post('/example', function (req, res) { //BD var connection = mysql.createConnection({ host: config.database.host, port: config.database.port, user: config.database.user, password: config.database.password, database: config.database.database }); var sql = ''; if (varExample != null) { sql = 'Random query'; connection.query(sql, function (err, results) { //Get results connection.end(); }); } }); 

有时我必须多次调用这个方法才能在数据库中插入数据。 在那一刻,我得到一个错误“太多的连接”。

在这些情况下closures连接的方法是什么?

你不应该做的是每次请求时都打开一个连接。 每次连接都很慢,其次驱动程序通常为您打开一个连接池,所以不应该是一个问题。 没有必要closures连接到MySQL。

基本上你必须这样做

 //BD var connection = mysql.createConnection({ host: config.database.host, port: config.database.port, user: config.database.user, password: config.database.password, database: config.database.database }); app.post('/example', function (req, res) { var sql = ''; if (varExample != null) { sql = 'Random query'; connection.query(sql, function (err, results) { //Get results }); } }); 

编辑:添加池选项有一个连接池基本上是我们大多数人想要一个服务器,要做许多查询。 它只是稍微改变你如何创build连接。

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

我意识到已经有了一个可以接受的答案,但是你真正应该做的是创build一个数据库池,其他答案真的没有例子。 你必须设置这个有点不同于与库创build一个正常的数据库连接。

-edit您不必担心closures连接。

  var mysql = require('mysql'); var pool = mysql.createPool({ connectionLimit : 10, host : 'example.org', user : 'bob', password : 'secret' }); pool.query('SELECT 1 + 1 AS solution', function(err, rows, fields) { if (err) throw err; console.log('The solution is: ', rows[0].solution); }); exports.Pool = pool;