在多条路由之间共享数据库连接

时间:2014-06-27 20:57:41

标签: javascript node.js mongodb express mongoose

我已根据Node.jsExpress示例创建了一个非常简单的route-separation应用。我想使用MongoDB驱动程序Mongoose为此应用提供支持。此示例仅列出UsersKittens

var express = require('express');
var app = express();
var mongoose = require('mongoose');
var user = require('./user');
var kitten = require('./kitten');

// Connect MongoDB
mongoose.connect('mongodb://localhost/mongoose');

// Express config here
...

// User
app.all('/users', user.list);

// Kitten
app.all('/kittens', kitten.list);

// Mongoose connection
var db = mongoose.connection;
db.once('open', function callback () {
  var kittySchema = mongoose.Schema({ name: String });
});

if (!module.parent) {
  app.listen(3000);
  console.log('Express started on port 3000');
}

对我来说,似乎在启动时连接到Mongo数据库而不是每个请求都是明智的。

但是如何与userkitten路由共享Mongoose连接?我知道如果我不需要共享两者之间的连接,我可以使用user.jskitten.js代码连接到数据库。

1 个答案:

答案 0 :(得分:1)

node.js执行require文件时,您可以在该文件中完成一次运行代码。这意味着你可以通过关闭存储东西。

foobardb.js

(function(){
  "use strict"; // always nice to have

  var mongoose = require('mongoose'),
      databaseConnection; 

  module.exports = function() {

      if ( !databaseConnection ) {
           mongoose.connect('mongodb://localhost/mongoose')
           databaseConnection = mongoose.connection;
      }

      (...)
  };

})();

databaseConnection将与您执行的所有require("foobardb.js");共享