使用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?
答案 0 :(得分:1)
重要!如果您使用打开了单独的连接 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