关闭连接MySQL Node.js

关闭连接MySQL Node.js,node.js,node-mysql,Node.js,Node Mysql,我正在用ExpressJS和MySQL开发一个节点应用程序。我正在使用这个模块,并且正在学习它的用法。 我遇到了如何正确关闭连接的问题 我就是这么做的: app.post('/example', function (req, res) { //BD var connection = mysql.createConnection({ host: config.database.host, port: config.database.port,

我正在用ExpressJS和MySQL开发一个节点应用程序。我正在使用这个模块,并且正在学习它的用法。 我遇到了如何正确关闭连接的问题

我就是这么做的:

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();
         }); 
    }
});
有时我不得不多次调用这个方法来在数据库中插入数据。在那一刻,我得到一个错误“连接太多”


在这种情况下,关闭连接的方法是什么?

您不应该在每次收到请求时都打开连接。每次连接都很慢,第二次驱动程序通常会为您打开一个连接池,所以应该不会有问题。没有必要关闭与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
         });  
    }
});
编辑:添加池选项 对于一个需要执行许多查询的服务器,拥有一个连接池基本上是我们大多数人想要的。 它只是稍微改变了创建连接的方式

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

我意识到已经有了一个公认的答案,但您真正应该做的是创建一个数据库池,而其他答案并没有给出示例。与创建与库的正常数据库连接相比,您必须对其进行稍微不同的设置

-编辑您不必担心关闭连接

    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;

这个解决方案有一个问题。如果我重复使用同一个连接进行不同的查询,节点回答“调用退出后无法将查询排队”对不起,您必须删除
连接。end()
这可能是一个愚蠢的问题,但是,节点如何在请求后关闭连接?为什么必须关闭连接?驱动程序创建了一个连接池,可以随时使用这些连接。。。当你不再需要使用它时,你会关闭它们的连接。但是作为一个节点服务器,我想它会运行很长一段时间,而且我想你会更多地使用mysql,你只需要保留它open@DevAlien默认情况下,驱动程序不会创建连接池。看一下我关于创建数据库池的回答。设置与此处的设置略有不同。