我什么时候连接mysql感到困惑。 程序启动时应该连接mysql吗?
var mysql = require('mysql');
var connection = mysql.createConnection(...);
router.get('/', (ctx, next) => {
connection.query('SELECT 1', function (error, results, fields) {
if (error) throw error;
// connected!
});
});
或类似的
var mysql = require('mysql');
router.get('/', (ctx, next) => {
var connection = mysql.createConnection(...);
connection.query('SELECT 1', function (error, results, fields) {
if (error) throw error;
// connected!
});
});
答案 0 :(得分:0)
程序启动时,请勿连接它。一方面,如果连接超时,您的程序将失败,并且您要为客户端的每个连接使用单独的数据库连接。
因此,如果您必须在提供的两种解决方案之间做出选择,则应采用第二种解决方案。但是您应该使用connection.end();
或者,您可以使用连接池:
var mysql = require('mysql');
var connection = mysql.createPool(...);
router.get('/', (ctx, next) => {
connection.query('SELECT 1', function (error, results, fields) {
if (error) throw error;
// connected!
});
});
如果要为所有路由共享一个数据库连接,则可以添加一个中间件,如下所示:
router.use(async (ctx, next) => {
await new Promise((reject, resolve) => {
pool.getConnection((err, connection) => {
if (err) {
reject(err)
} else {
ctx.dbConnection = connection
resolve()
}
})
})
await next()
ctx.dbConnection.release()
})
router.get('/', (ctx, next) => {
connection.query('SELECT 1', function (error, results, fields) {
if (error) throw error;
// connected!
});
});
我建议切换到基于Promise的mysql版本。