Проблемы при переходе с mongoose.connect() на mongoose.createConnection()

#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 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 
  

против

 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