Dies ist der Code, den ich für die Verbindung zu meiner Datenbank verwende:
private connectDatabase(databaseUri: string): Promise<Mongoose.Connection> {
return Mongoose.connect(databaseUri).then(() => {
debug('Connected to MongoDB at %O', databaseUri);
return Mongoose.connection;
});
}
Heute habe ich Mongoose auf Version 4.11.0 aktualisiert und diese Warnung wurde beim Ausführen meiner Tests angezeigt:
(node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
use `openUri()` instead, or set the `useMongoClient` option if using `connect()`
or `createConnection()`
Ich kann keine Informationen finden, wie "useMongoClient" gesetzt wird.
Wissen Sie, wie das geht?
Ohne TypeScript können Sie das Problem weitgehend ignorieren und Mongoose.connect(databaseUri, { useMongoClient: true })
verwenden.
Wenn Sie die Warnung wirklich vermeiden möchten, vermeiden Sie die Version 4.11.0.
Ich habe auf Version 4.11.1 aktualisiert und da @ types/mongoose @ 4.7.18 noch nicht aktualisiert wurde und sie das Feld useMongoClient
in der ConnectionOptions
nicht erwähnen, importierte ich das Modul folgendermaßen:
const Mongoose = require('mongoose');
Und dann diese Funktion verwendet:
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}`));
}
So verwenden Sie useMongoClient : mongoose.connect('mongodb://localhost/advisorDemoTestDB', { useMongoClient: true })
Fügen Sie {useMongoClient: true} als weiteres Argument für die Verbindung oder die Methode createConnection hinzu. Sie hängt von der verwendeten Moose-Version ab.
// 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 */
});
mongoose.connection.openUri('mongodb://127.0.0.1/camp_v12')
hat jemand das probiert? Meine veraltete Warnung verschwand, wenn ich dies verwende, es war aus der Dokumentation
Am einfachsten beheben Sie dies, indem Sie Ihr Terminal öffnen und Ihr Verzeichnis in Ihr Stammprojekt ändern (Ordner, in dem sich package.json
befindet).
Lauf:npm remove mongoose
dann:
npm install [email protected] --save
problem gelöst.
Ein Upgrade ist nicht immer die beste Option.
Stellen Sie mit Mongoose 4.11.x eine Verbindung zu MongoDB her (getestet mit mLab-Einzelinstanz und MongoDB-Atlas-Replikatsatz):
const mongoose = required ('mongoose'); mongoose.Promise = global.Promise; const-Optionen = { promiseLibrary: global.Promise, useMongoClient: true, }; Funktion connect () { mongoose.connect (URI, Optionen) .then (function () { const admin = neuer mongoose.mongo.Admin (mongoose.connection.db); admin.buildInfo (function (err, info) { if (err) { console.err (`Fehler beim Abrufen der MongoDB-Informationen: $ {err}`); } else { console.log (`Verbindung zu MongoDB (Version $ {info.version}) wurde erfolgreich geöffnet!`) ; } }); }) .catch ((err) => console.error (`Fehler beim Verbinden mit MongoDB: $ {err}`)); } module.exports = connect;
Modell erstellen:
const mongoose = required ('mongoose'); const userSchema = neues mongoose.Schema ({...); module.exports = mongoose.model ('User ', userSchema);
Wie viele Antworten sagen, wird das Problem durch das Hinzufügen von { useMongoClient: true }
im options-Argument zur connect
- oder createConnection
-Methode gelöst.
Für z.
// With mongoose.connect method
mongoose.connect('mongodb://localhost/app', { useMongoClient: true });
// With createConnection method
mongoose.createConnection('mongodb://localhost/app', { useMongoClient: true });
Aber was ist MongoClinet überhaupt?
Mit MongoDB Node.js Driver Version 1.2 wurde eine neue Verbindungsklasse MongoClient eingeführt, die unter allen offiziellen Treibern den gleichen Namen hat.
Die neue Verbindungsklasse MongoClient bestätigt alle Schreibvorgänge in MongoDB, im Gegensatz zu der vorhandenen Verbindungsklasse Db, für die Bestätigungen deaktiviert sind.
{ useMongoClient: true }
weist moongoose an, die neue Verbindungsklasse anstelle der alten zu verwenden
Für mehr Infos hier klicken
Die einfachste Lösung für dieses Problem:
Führen Sie diesen Befehl im Projektstammverzeichnis über das Terminal aus:
npm remove mongoose
npm install [email protected] --save
Problem gelöst.
Ein Upgrade ist nicht immer die beste Option.
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!
});
Entsprechend der mongoose
Dokumentation kann hier useMongoClient
eingestellt werden.
function connectDatabase(databaseUri){
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
});
return promise;
}
Error:
(Knoten: 1652) DeprecationWarning: open()
ist in Moose> = 4.11.0 veraltet. Verwenden Sie stattdessen openUri()
oder setzen Sie die Option useMongoClient
, wenn Sie connect()
oder createConnection()
verwenden.
Lösung: Zum Festlegen von useMongoClient: true in der Verbindungseigenschaft
var promise = mongoose.connect('mongodb://localhost/myapp', {
useMongoClient: true,
/* other options */
});
Siehe http://mongoosejs.com/docs/connections.html#use-mongo-client Wartet jetzt auf Anforderung