Соединение 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);
});