node.js - openset - use mongoclient mongoose
¿Cómo configurar useMongoClient(Mongoose 4.11.0)? (12)
Este es el código que uso para conectarme a mi base de datos:
private connectDatabase(databaseUri: string): Promise<Mongoose.Connection> {
return Mongoose.connect(databaseUri).then(() => {
debug(''Connected to MongoDB at %O'', databaseUri);
return Mongoose.connection;
});
}
Hoy actualicé Mongoose a la versión 4.11.0 y recibí esta advertencia al ejecutar mis pruebas:
(node:4138) DeprecationWarning: `open()` is deprecated in mongoose >= 4.11.0,
use `openUri()` instead, or set the `useMongoClient` option if using `connect()`
or `createConnection()`
No puedo encontrar ninguna información sobre cómo "configurar useMongoClient".
¿Ustedes saben cómo?
A mí me funciona usando el mecanografiado:
var dbOpt : any = {
useMongoClient: true
}
mongoose.connect(dbURI, dbOpt);
Agregue {useMongoClient: true} como otro argumento para conectar o crear el método de conexión, depende de la versión de mangosta que esté utilizando.
// 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 */
});
Así es como utiliza
useMongoClient
:
mongoose.connect(''mongodb://localhost/advisorDemoTestDB'', { useMongoClient: true })
Como dicen muchas respuestas, agregar
{ useMongoClient: true }
en el argumento de opciones para
connect
o
createConnection
método de
createConnection
resolverá el problema.
Por ej.
// With mongoose.connect method
mongoose.connect(''mongodb://localhost/app'', { useMongoClient: true });
// With createConnection method
mongoose.createConnection(''mongodb://localhost/app'', { useMongoClient: true });
Pero, ¿qué es MongoClinet en primer lugar?
Desde MongoDB Node.js Driver versión 1.2, se introdujo una nueva clase de conexión MongoClient que tiene el mismo nombre en todos los controladores oficiales.
La nueva clase de conexión MongoClient reconoce todas las escrituras a MongoDB , en contraste con la clase de conexión existente Db que tiene los reconocimientos desactivados.
Entonces
{ useMongoClient: true }
le dice a moongoose que use la nueva clase de conexión en lugar de la anterior
Para más información haga clic aquí.
Conéctese a MongoDB con Mongoose 4.11.x (probado con la instancia única mLab y el conjunto de réplicas 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;
Crear modelo:
const mongoose = require(''mongoose''); const userSchema = new mongoose.Schema({...}); module.exports = mongoose.model(''User'', userSchema);
De acuerdo con la
documentation
la
mongoose
, así es como se puede configurar
useMongoClient
.
function connectDatabase(databaseUri){
var promise = mongoose.connect(''mongodb://localhost/myapp'', {
useMongoClient: true,
});
return promise;
}
La solución más fácil para esto sería abrir su terminal, cambiar su directorio a su proyecto raíz (carpeta donde está
package.json
)
Correr:
npm remove mongoose
entonces:
npm install [email protected] --save
problema resuelto.
Actualizar no siempre es la mejor opción.
La solución más fácil para esto:
Ejecute este comando en la carpeta raíz del proyecto a través del terminal:
npm remove mongoose
npm install [email protected] --save
Problema resuelto.
Actualizar no siempre es la mejor opción.
Error:
(nodo: 1652) DeprecationWarning:
open()
está en desuso en mangosta> = 4.11.0, use
openUri()
lugar, o configure la opción
useMongoClient
si usa
connect()
o
createConnection()
.
Solución: para establecer useMongoClient: true en la propiedad de conexión
var promise = mongoose.connect(''mongodb://localhost/myapp'', {
useMongoClient: true,
/* other options */
});
Ver documentation ahora escuchando por solicitud
Sin Typecript
, puede ignorar el problema y usar
Mongoose.connect(databaseUri, { useMongoClient: true })
.
Si realmente desea evitar la advertencia, evite la versión 4.11.0.
Actualicé a la versión 4.11.1 y como @ types / mongoose @ 4.7.18 aún no están actualizados y no mencionan el campo
useMongoClient
en
ConnectionOptions
, así es como
useMongoClient
el módulo:
const Mongoose = require(''mongoose'');
Y luego usó esta función:
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}`));
}
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!
});
mongoose.connection.openUri(''mongodb://127.0.0.1/camp_v12'')
¿Alguien ha probado esto? mi advertencia en desuso desapareció cuando uso esto, era de la documentación