2

使用最新的 mongoose 更新,您不能再像我一直在做的那样对用户建模。我需要在整个应用程序中共享相同的数据库连接。

https://github.com/LearnBoost/mongoose/issues/1249

这是不再有效的旧方法:

./models/user.js

var mongoose = require('mongoose'), cfg = require('../config')
, Schema = mongoose.Schema
, db = mongoose.createConnection(cfg.mongo.uri, cfg.mongo.db);
...

module.exports = db.model('Item', ItemSchema);

如何按照上面的 github 问题中的建议重新使用 db 连接?

var User = require('./models/user');在我的代码库的几个不同的地方使用。

4

1 回答 1

9

选项 1:使用共享对象

我的模型代码看起来很相似,但不是重复需要模块,而是在应用程序启动时只需要它们一次,然后将结果分配给共享对象。例如,如果您使用的是快速应用程序,您可以使用类似app.locals.models.User = require('./models/user');. 然后任何有权访问的东西都app可以看到你的模型,而不需要任何要求。


选项 2:确保在导出的函数中进行单个修改

您可以像这样定义您的用户模块:

var mongoose = require('mongoose');

var userSchema = new mongoose.Schema({name: String});

var User = null;

module.exports = function(db) {
  if (db && User === null) {
    User = db.model('User', userSchema);
  }
  return User;
};

当您启动您的应用程序时,您只需要:require('./models/user')(db). 应用程序中其他模块的后续要求可以删除db参数,因为User只会设置一次。

于 2012-12-14T07:26:59.460 回答