Express.JS + Node-Mysql 和每个 http 请求 1 个连接

Express.JS + Node-Mysql and 1 connection per http request

本文关键字:http 请求 连接 JS Node-Mysql Express      更新时间:2023-09-26

我是Express的新手,我试图围绕Express + Node-Mysql进行思考。

我想为每个http请求使用一个新的mysql连接。

这是我的应用程序.js文件:

var express = require( "express" ),
    mysql = require( "mysql" ),
    routes = require( "./routes" );
var app = module.exports = express(),
    db = mysql.createConnection( require( "./config/db" ) );
app.configure(function(){
    app.set( "views", __dirname + "/views" );
    app.set( "view engine", "jade" );
    app.set( "db", db );
    app.use( express.logger( "dev" ));
    app.use( express.bodyParser() );
    app.use( app.router );
    app.use( express.static( "front" ));
});
app.configure( "development", function(){
    app.use( express.errorHandler() );
});
routes( app );
app.listen(80);

然后,在我的路由文件中,我执行以下操作:

module.exports = function( app ){
    var db = app.get( "db" );
    app.get( "/stuff", function( req, res ){
        db.connect( function(err){
            var sql = "SELECT * FROM stuff";
            db.query( sql, function( err, result ){
                res.send( result );
                db.end(function( err ){ });
            });
        });
    });
};

这有效,但我不确定它是否"正确"。 有没有更清洁的方式来完成我所追求的?

感谢(提前)您的帮助。

如果要

为每个请求执行一个数据库连接,请放置以下行:

db = mysql.createConnection(require( "./config/db" ));

在您的请求处理程序中(例如在路由.js内),就在您执行db.connect() .从查询中获得所有结果后,致电db.end()

由于连接到数据库是一项相对昂贵的操作,因此您可能需要考虑使用连接池。保持几个连接处于打开状态并在需要时从池中提取空闲连接比为每个请求打开和关闭新连接更有效。泛型池 npm 模块是一个很好的模块。