从mongoose.connect()迁移到mongoose.createConnection()时遇到问题

时间:2020-11-12 18:16:02

标签: node.js mongoose mongoose-schema

使用mongoose.createConnection时,如何从路由器访问模型?每次都需要mongoose.createConnection吗?我在文档中使用了这种模式:

//app.js

const mongoose = require('mongoose');

const conn = mongoose.createConnection(process.env.MONGODB_URI);
conn.model('User', require('../schemas/user'));
conn.model('PageView', require('./schemas/pageView'));

module.exports = conn;

现在,这不起作用:

//router.js

const PageView = require('./schemas/pageView');

..我知道它不起作用,因为我不再从架构文件中导出模型,而只是从架构中导出模型:

// ./schemas/pageView.js

module.exports = PageViewSchema;

在使用createConnection之前,我在app.js中使用了默认的 mongoose.connect(),所以我只需要导出模型,就像这样:

// ./schemas/pageView.js

const PageView = mongoose.model("PageView", PageViewSchema);
module.exports = PageView;

如何避免需要在要使用模型的每个文件中创建createConnection?

1 个答案:

答案 0 :(得分:1)

From mongoose NPM

重要!如果您使用打开了单独的连接 mongoose.createConnection(),但尝试通过以下方式访问模型 mongoose.model('ModelName')不能正常工作,因为它是 没有连接到活动的数据库连接。在这种情况下,请访问您的 通过您创建的连接进行建模:

const conn = mongoose.createConnection('your connection string'); 
const MyModel = conn.model('ModelName', schema);
const m = new MyModel;
m.save(); 
// works 

vs

const conn = mongoose.createConnection('your connection string');
const MyModel = mongoose.model('ModelName', schema); 
const m = new MyModel; 
m.save();
// does not work b/c the default connection object was never connected