#node.js #mongoose #mongoose-schema
#node.js #mongoose #mongoose-схема
Вопрос:
Как мне получить доступ к модели с моего маршрутизатора при использовании 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 я использовал mongoose.connect() по умолчанию в моем app.js , поэтому я бы просто экспортировал модель, вот так:
// ./schemas/pageView.js
const PageView = mongoose.model("PageView", PageViewSchema);
module.exports = PageView;
Как я могу избежать необходимости создания соединения в каждом файле, который я хочу использовать для модели?
Комментарии:
1. Поэтому настройка
global.conn = mongoose.createConnection()
в app.js , позволяет мне использоватьconst PageView = conn.model("pageView");
в моем маршрутизаторе… Я не уверен, что глобальное определение области действия соединения является лучшим решением здесь?
Ответ №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
против
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