node.js - Node.js 上 MongoDB 连接的最佳实践是什么?

标签 node.js mongodb restify

这对我来说有点不清楚(我刚刚开始使用 Node 和 Mongo),并且由于服务器性能和压力(我想这是另一个问题,但我会得到到文章末尾)。

所以,假设我正在使用 Node.js 和 Restify 编写 API,其中每个 API 端点对应一个函数,我应该:

a) 打开数据库连接并将其存储在全局变量中,然后在每个函数中使用它?
示例:

// requires and so on leave me with a db var, assume {auto_reconnect: true}
function openDB() {
    db.open(function(err, db) {
        // skip err handling and so on
        return db;
    }
}

var myOpenDB = openDB(); // use myOpenDB in every other function I have

b)打开数据库连接,然后把所有东西都放在一个巨大的闭包里?
示例:

// same as above
db.open(function(err, db) {
    // do everything else here, for example:
    server.get('/api/dosomething', function doSomething(req, res, next) { // (server is an instance of a Restify server)
        // use the db object here and so on
    });
}

c) 每次需要时打开和关闭数据库?
示例:

// again, same as above
server.get('/api/something', function doSomething(req, res, next) {
    db.open(function(err, db) {
        // do something
        db.close();
    });
});

server.post('/api/somethingelse', function doSomethingElse(req, res, next) {
    db.open(function(err, db) {
        // do something else
        db.close();
    });
});

最后一个是我凭直觉会做的,但同时我也觉得这样做不太舒服。它不会对 Mongo 服务器造成太大压力吗?尤其是当(我希望我确实做到了)它会收到数百(如果不是数千)这样的电话吗?

提前谢谢你。

最佳答案

我喜欢 MongoJS很多。它允许您以与默认命令行非常相似的方式使用 Mongo,它只是官方 Mongo 驱动程序的包装。您只需打开数据库一次并指定您将使用哪些集合。如果您使用 --harmony-proxies 运行 Node,您甚至可以省略集合。

var db = require('mongojs').connect('mydb', ['posts']);

server.get('/posts', function (req, res) {
  db.posts.find(function (err, posts) {
    res.send(JSON.stringify(posts));
  });
});

关于node.js - Node.js 上 MongoDB 连接的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11799953/

相关文章:

linux - centos上mongodb启动失败

javascript - 用 Restify 抽象 Mongoose

java - 如何在 spring data mongodb 中对所有字段建立索引?

mongodb - mongodb 随着时间的推移而获得的 yield

node.js - 我应该如何在 Node.js 中使用 Web 前端实现 RESTful API?

node.js - restify 2.6.1 如何为特定请求禁用正文解析器

javascript - 如何在数据库中存储 Mongoose 模式

node.js - NPM-package.json#engines |如何指定Python?

javascript - 我可以将 node.js 用作 REPL shell 吗?

node.js - MEAN 应用程序中项目的单独页面