3

我是 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 ){ });

            });

        });

    });

};

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

在此先感谢您的帮助。

4

1 回答 1

3

如果您想为每个请求做一个 db 连接,请输入以下行:

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

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

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

于 2013-01-31T23:14:55.653 回答