我刚开始使用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);
答案 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()
。