Как установить useMongoClient (Mongoose 4.11.0)?
Это код, который я использую для подключения к моей базе данных:
private connectDatabase(databaseUri: string): Promise<Mongoose.Connection> {
return Mongoose.connect(databaseUri).then(() => {
debug('Connected to MongoDB at %O', databaseUri);
return Mongoose.connection;
});
}
Сегодня я обновил Mongoose до версии 4.11.0, и я получил это предупреждение при выполнении моих тестов:
(node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
use `openUri()` instead, or set the `useMongoClient` option if using `connect()`
or `createConnection()`
Я не могу найти никакой информации о том, как "установить useMongoClient".
Вы, ребята, знаете, как?
Ответы
Ответ 1
Без Typescript вы можете в значительной степени игнорировать проблему и использовать Mongoose.connect(databaseUri, { useMongoClient: true })
.
Если вы действительно хотите избежать предупреждения, избегайте версии 4.11.0.
Я обновлен до версии 4.11.1, и поскольку @types/mongoose @4.7.18 еще не обновлены, и они не упоминают поле useMongoClient
в ConnectionOptions
, вот как я импортировал модуль:
const Mongoose = require('mongoose');
И затем использовала эту функцию:
private connectDatabase(databaseUri: string): Promise<any> {
return Mongoose.connect(databaseUri, { useMongoClient: true })
.then(() => {
console.log('Connected to MongoDB at ', databaseUri);
return Mongoose.connection;
})
.catch(err => debug(`Database connection error: ${err.message}`));
}
Ответ 2
Вот как вы используете useMongoClient:
mongoose.connect('mongodb://localhost/advisorDemoTestDB', { useMongoClient: true })
Ответ 3
Добавьте {useMongoClient: true} в качестве другого аргумента для подключения или создания метода соединения, его зависит от версии используемой вами мангусты.
// Using `mongoose.connect`...
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
// Or `createConnection`
var promise = mongoose.createConnection('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
Ответ 4
mongoose.connection.openUri('mongodb://127.0.0.1/camp_v12')
Кто-нибудь пробовал это? мое устаревшее предупреждение исчезло, когда я использую это, это было из документации
http://mongoosejs.com/docs/connections.html
Ответ 5
Самым простым решением для этого было бы открыть ваш терминал, сменить каталог на ваш корневой проект (папка, где package.json
есть)
Run:
npm remove mongoose
то
npm install [email protected] --save
проблема решена.
Обновление не всегда является лучшим вариантом.
http://mongoosejs.com/docs/connections.html
Ответ 6
Как говорят многие ответы, добавление { useMongoClient: true }
в аргументе параметров к методу connect
или createConnection
решит проблему.
Например,
// With mongoose.connect method
mongoose.connect('mongodb://localhost/app', { useMongoClient: true });
// With createConnection method
mongoose.createConnection('mongodb://localhost/app', { useMongoClient: true });
Но что такое MongoClient?
Начиная с версии 1.2 драйвера MongoDB Node.js, был представлен новый класс подключений MongoClient с одинаковыми именами во всех официальных драйверах.
Новый класс подключения MongoClient подтверждает все записи в MongoDB, в отличие от существующего класса подключения к БД, у которого отключены подтверждения.
Поэтому { useMongoClient: true }
говорит moongoose использовать новый класс подключения, а не старый
Для получения дополнительной информации нажмите здесь
Ответ 7
Подключитесь к MongoDB с Mongoose 4.11.x(протестирован как с одним экземпляром mLab, так и с набором MongoDB Atlas):
const mongoose = require('mongoose');
mongoose.Promise = global.Promise;
const options = {
promiseLibrary: global.Promise,
useMongoClient: true,
};
function connect() {
mongoose.connect(URI, options)
.then(function() {
const admin = new mongoose.mongo.Admin(mongoose.connection.db);
admin.buildInfo(function(err, info) {
if (err) {
console.err(`Error getting MongoDB info: ${err}`);
} else {
console.log(`Connection to MongoDB (version ${info.version}) opened successfully!`);
}
});
})
.catch((err) => console.error(`Error connecting to MongoDB: ${err}`));
}
module.exports = connect;
Создать модель:
const mongoose = require('mongoose');
const userSchema = new mongoose.Schema({...});
module.exports = mongoose.model('User', userSchema);
Ответ 8
В соответствии с mongoose
документация, так можно установить useMongoClient
.
function connectDatabase(databaseUri){
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
});
return promise;
}
Ответ 9
Самое простое исправление для этого; "npm remove mongoose"
, тогда проблема "npm install [email protected] --save"
решена. Модернизация не всегда является лучшим вариантом.
Ответ 10
Самое простое исправление для этого:
Запустите эту команду в корневой папке проекта через терминал:
npm remove mongoose
npm install [email protected] --save
Проблема решена.
Обновление не всегда является лучшим вариантом.
https://github.com/Automattic/mongoose/issues/5399
Ответ 11
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/starbucks', {
useMongoClient: true
});
var db = mongoose.connection;
db.on('error', console.error.bind(console, 'connection error:'));
db.once('openUri', function() {
// we're connected!
});
Ответ 12
Ошибка:
(node: 1652) Устаревшее предупреждение: open()
устарело в mongoose >= 4.11.0, вместо этого используйте openUri()
или установите параметр useMongoClient
при использовании connect()
или createConnection()
.
Решение: Чтобы установить useMongoClient: true в свойстве соединения
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
См. http://mongoosejs.com/docs/connections.html#use-mongo-client
теперь прослушивание запроса
Ответ 13
Он работает для меня с помощью Typescript:
var dbOpt : any = {
useMongoClient: true
}
mongoose.connect(dbURI, dbOpt);