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

时间:2013-01-31 16:36:01

标签: javascript node.js express node-mysql

我是Express的新手,我正试图围绕Express + Node-Mysql。

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

这是我的app.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 ){ });

            });

        });

    });

};

这有效,但我不确定它是否“合适”。有没有更清洁的方法来完成我的目标?

先谢谢你的帮助。

1 个答案:

答案 0 :(得分:3)

如果要为每个请求执行一个数据库连接,请输入以下行:

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

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

由于连接到数据库是一项相对昂贵的操作,您可能需要考虑使用连接池。保持一些连接打开并在需要时从池中拉出空闲连接比为每个请求打开和关闭新连接更有效。 generic-pool npm module是一个不错的选择。