2013-01-31 66 views
3

我是Express的新手,並且試圖圍繞Express + Node-Mysql進行打包。Express.JS + Node-Mysql和每個http請求1個連接

我想爲每個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){ }); 

      }); 

     }); 

    }); 

}; 

這工作,但我不知道這是否是「適當的」。有沒有更完善的方式來完成我所追求的目標?

(提前)感謝您的幫助。

回答

3

如果你想要做的每個請求對應一個數據庫連接,把這個行:

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

您的請求處理程序中(例如內部routes.js),就在你做db.connect()之前。一旦您獲得了查詢中的所有結果,請致電db.end()

雖然連接數據庫是一個相對昂貴的操作,但您可能需要考慮使用連接池。保持一些連接打開並在需要時從池中提取空閒連接將比爲每個請求打開和關閉新連接更有效。 generic-poolnpm module是一個很好的。