如何正确使用node-mysql?

时间:2014-01-24 16:13:20

标签: mysql node.js express

我刚开始使用node-mysql2,我很困惑如何正确使用它。例子:

(隐式建立连接)

var express = require("express"),
    app = express();

var mysql = require("mysql2");

var conn = mysql.createConnection({ ... });

app.VERB("/", function(req, res){
    conn.query('SELECT 1+1 as test1', function(err, rows) {
        // Show data to user...
        // No .end() needed?
    });
});

app.listen(8000);

第二个例子:

var express = require("express"),
    app = express();

var mysql = require("mysql2");

var conn = mysql.createConnection({ ... });
    conn.connect(function(err){ ... });  // Is it right place to put it here? Or it has to go inside the callback below?

app.VERB("/", function(req, res){
    conn.query("SELECT 1+1 as test1", function(err, rows){
        // Show data to user...
        conn.end(); // .end() necessary?
    });
});

app.listen(8000);

1 个答案:

答案 0 :(得分:3)

虽然我没有使用node-mysql2,但它与原始node-mysql模块兼容,因此适用相同的使用模式。

使用它的最佳方式是使用connection pooling。这样,MySQL客户端将根据需要创建和销毁连接。当您不再需要连接时,您的工作就是致电connection.release()

var express = require("express"),
    app = express();

var mysql = require("mysql2");

var pool = mysql.createPool({ ... });

app.VERB("/", function(req, res){
    pool.getConnection(function(err, conn) {
      if (err) { /* handle the error and bail out */ }
      conn.query('SELECT 1+1 as test1', function(err, rows) {
          conn.release(); /* the connection is released back to the pool */
          if (err) { /* handle the error */ }
          else { /* show data to user */ }
      });
    });
});

app.listen(8000);

如果您的应用“永远”运行(例如网站),则无需致电pool.end()。如果您没有使用连接池,则无需在每次请求后调用connection.end()。您不希望:这会给您在每次请求时建立/拆除MySQL连接的开销!

如果您的应用程序未“永久”运行(例如,命令行实用程序),请在退出命令行之前调用pool.end()connection.end()