node-postgres(pg)和mongodb的Express.js结构

时间:2013-11-06 00:26:48

标签: node.js mongodb express pg node-postgres

首先,我在了解从服务器建立数据库连接的性能成本方面相当新,所以如果我说出一些我可能没有的意思,请原谅。

我目前正在为node.js开一个mongodb类,我真的着迷于他们最初提供的博客服务器的代码是多么简单和优雅(我们主要只是对数据库实现查询)。它看起来像这样:

var express = require('express')
  , app = express() 
  , cons = require('consolidate') 
  , MongoClient = require('mongodb').MongoClient 
  , routes = require('./routes'); 

MongoClient.connect('mongodb://localhost:27017/blog', function(err, db) {
    if(err) throw err;
    app.set('views', __dirname + '/views');
    app.use(express.cookieParser());
    app.use(express.bodyParser());
    routes(app, db);
    app.listen(3000);
    console.log('Express server listening on port 3000'); });

如您所见,它在服务器配置为执行任何操作之前建立数据库连接。可以将这种模式用于生产吗?它似乎是模块化的,因为db传递给index.js,它处理所有路由。

我之前一直在做的是在查询数据库并关闭它的每个请求(使用pg模块)上建立连接。我其实不确定这是不是一个好主意。但我想要一些确认,我上面描述的这种模式是可以的;如果没有,也许提供一个替代方案并解释原因(mongodb的替代结构/模式和/或pg 不是像猫鼬这样的替代模块)。

谢谢!

1 个答案:

答案 0 :(得分:1)

你做得很好。 node-postgres使用集合池,这意味着您可以打开一次连接并重用它。对于许多应用程序,池化数据库连接是首选,因为它比为每个请求打开和关闭它们更有效。但是,如果由于某种原因存在长期存在的数据库连接,则可能不希望池数据库连接,因为存在耗尽数据库池的风险。根据{{​​3}},池中的默认连接数为10,但您可以通过将数字设置为0来关闭连接池。