Соединение Mongoose

Я прочитал краткое руководство с веб-сайта Mongoose и почти скопировал код, но не могу подключить MongoDB с помощью Node.js.

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');

exports.test = function(req, res) {
  var db = mongoose.connection;
  db.on('error', console.error.bind(console, 'connection error:'));
  console.log("h1");
  db.once('open', function callback () {
    console.log("h");
  });
  res.render('test');
};

Это мой код Консоль печатает только h1, а не h. Где я не прав?

Ответ 1

При вызове mongoose.connect он установит соединение с базой данных.

Однако вы присоединяете прослушиватель событий для open в гораздо более поздний момент времени (когда обрабатывается запрос), что означает, что соединение, вероятно, уже активно, и событие open уже вызвано (вы просто еще не слушал его).

Вы должны изменить свой код так, чтобы обработчик событий был как можно ближе (по времени) к вызову соединения:

var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/test');
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('open', function callback () {
  console.log("h");
});

exports.test = function(req,res) {
  res.render('test');
};

Ответ 2

Самый безопасный способ сделать это, чтобы "прослушать событие connect". Таким образом, вам все равно, сколько времени потребуется для того, чтобы БД предоставила вам соединение.

Как только это будет сделано - вы должны запустить сервер. Также.. config.MONGOOSE отображается через ваше приложение, поэтому у вас есть только одно соединение с БД.

Если вы хотите использовать соединение mongoose, просто требуйте конфигурацию в своем модуле и вызовите config.Mongoose. Надеюсь, это поможет кому-то!

Здесь код.

var mongoURI;

mongoose.connection.on("open", function(ref) {
  console.log("Connected to mongo server.");
  return start_up();
});

mongoose.connection.on("error", function(err) {
  console.log("Could not connect to mongo server!");
  return console.log(err);
});

mongoURI = "mongodb://localhost/dbanme";

config.MONGOOSE = mongoose.connect(mongoURI);

Ответ 3

Появилась ошибка. Затем я узнал, что у меня не работает mongod и слушают подключения. Для этого вам просто нужно открыть другую командную строку (cmd) и запустить mongod

Ответ 4

Логика подключения по умолчанию Mongoose устарела с 4.11.0. Рекомендуется использовать новую логику подключения:

  • useMongoClient
  • библиотека локальных обещаний

Вот пример из модуля npm: mongoose-connect-db

// Connection options
const defaultOptions = {
  // Use native promises (in driver)
  promiseLibrary: global.Promise,
  useMongoClient: true,
  // Write concern (Journal Acknowledged)
  w: 1,
  j: true
};

function connect (mongoose, dbURI, options = {}) {
  // Merge options with defaults
  const driverOptions = Object.assign(defaultOptions, options);

  // Use Promise from options (mongoose)
  mongoose.Promise = driverOptions.promiseLibrary;

  // Connect
  mongoose.connect(dbURI, driverOptions);

  // If the Node process ends, close the Mongoose connection
  process.on('SIGINT', () => {
    mongoose.connection.close(() => {
      process.exit(0);
    });
  });

  return mongoose.connection;
}

Ответ 5

Простой способ установить соединение:

import mongoose from 'mongoose'

mongoose.connect(<connection string>);
mongoose.Promise = global.Promise;
mongoose.connection.on("error", error => {
    console.log('Problem connection to the database'+error);
});