Tengo una clase de contenedor de base de datos que establece una conexión con alguna instancia de MongoDB:
async connect(connectionString: string): Promise<void> {
this.client = await MongoClient.connect(connectionString)
this.db = this.client.db()
}
Esto me dio una advertencia:
(nodo: 4833) DeprecationWarning: el analizador de cadenas de URL actual está en desuso y se eliminará en una versión futura. Para usar el nuevo analizador, pase la opción {useNewUrlParser: true} a MongoClient.connect.
El connect()
método acepta una MongoClientOptions
instancia como segundo argumento. Pero no tiene una propiedad llamada useNewUrlParser
. También intenté establecer esas propiedades en la cadena de conexión de esta manera: mongodb://127.0.0.1/my-db?useNewUrlParser=true
pero no tiene ningún efecto en esas advertencias.
Entonces, ¿cómo puedo configurar useNewUrlParser
para eliminar esas advertencias? Esto es importante para mí, ya que el script debe ejecutarse como cron y esas advertencias generan correo basura.
Estoy usando el mongodb
controlador en la versión 3.1.0-beta4
con el @types/mongodb
paquete correspondiente 3.0.18
. Ambos son el último uso disponible npm install
.
Solución alterna
Usando una versión anterior del controlador mongodb:
"mongodb": "~3.0.8",
"@types/mongodb": "~3.0.18"
beta
versión que de alguna manera se lanzó el npm durante el fin de semana. No se preocupe por eso hasta que la API esté realmente finalizada. Hiciste lo correcto al instalar una versión estable.Respuestas:
Comprueba tu
mongo
versión:Si está utilizando la versión> = 3.1.0, cambie su
mongo
archivo de conexión a ->o su archivo de conexión de mangosta a ->
Idealmente, es una característica de la versión 4, pero v3.1.0 y superior también lo admiten. Echa un vistazo a MongoDB GitHub para más detalles.
fuente
Como se señaló, el
3.1.0-beta4
lanzamiento del controlador fue "liberado en la naturaleza" un poco antes por el aspecto de las cosas. La versión es parte del trabajo en progreso para admitir nuevas características en la próxima versión de MongoDB 4.0 y hacer algunos otros cambios de API.Uno de esos cambios que desencadena la advertencia actual es el
useNewUrlParser
opción, debido a algunos cambios en torno a cómo funciona realmente el URI de conexión. Más sobre eso más tarde.Hasta que las cosas "se calmen", probablemente sería aconsejable "anclar" al menos a la versión menor para
3.0.x
lanzamientos:Eso debería evitar que la
3.1.x
rama se instale en instalaciones "nuevas" en módulos de nodo. Si ya instaló una versión "más reciente" que es la versión "beta", entonces debe limpiar sus paquetes (ypackage-lock.json
) y asegurarse de llevarla a una3.0.x
versión en serie.En cuanto al uso de las "nuevas" opciones de URI de conexión, la restricción principal es incluir el
port
en la cadena de conexión:Esa es una regla más "estricta" en el nuevo código. El punto principal es que el código actual es esencialmente parte del
mongodb
código de repositorio "node-native-driver" (npm ), y el "nuevo código" realmente importa delmongodb-core
biblioteca que "sustenta" el controlador de nodo "público".El objetivo de la "opción" que se agrega es "facilitar" la transición al agregar la opción al nuevo código para que el analizador más nuevo (en realidad basado en
url
) se esté utilizando en el código que agrega la opción y borra la advertencia de desaprobación y, por lo tanto, verifica que sus cadenas de conexión pasadas realmente cumplen con lo que espera el nuevo analizador.En futuras versiones, el analizador 'heredado' se eliminaría y luego el nuevo analizador simplemente será lo que se use, incluso sin la opción. Pero para ese momento, se espera que todo el código existente tenga una amplia oportunidad de probar sus cadenas de conexión existentes contra lo que espera el nuevo analizador.
Entonces, si desea comenzar a usar las nuevas funciones del controlador a medida que se lanzan, use las versiones disponibles
beta
y posteriores e idealmente asegúrese de proporcionar una cadena de conexión que sea válida para el nuevo analizador habilitando lauseNewUrlParser
opciónMongoClient.connect()
.Si realmente no necesita acceso a las funciones relacionadas con la vista previa de la versión MongoDB 4.0, fije la versión a una
3.0.x
serie como se indicó anteriormente. Esto funcionará según lo documentado y "anclando" esto asegura que las3.1.x
versiones no se "actualicen" sobre la dependencia esperada hasta que realmente desee instalar una versión estable.fuente
npm install mongodb
resultó en la instalación de la "beta" (claramente marcada en la cadena de versión que se muestra en la pregunta) ya que estaba marcada comostable
en el repositorio npm cuando No debería haber sido. Esto fue de hecho un error en ese momento y siempre debe considerarse así si alguna versión de código que se muestraalpha
obeta
dentro de la cadena de versión se marca de manera similar como estable. Naturalmente, el tiempo ha pasado y esta es una característica en las versiones estables ahora, hasta que (como se señaló) finalmente desaparecerá.El siguiente código resaltado para la conexión de mangosta resolvió la advertencia para el controlador de mangosta:
fuente
No hay nada que cambiar. Pase solo en la función de conexión
{useNewUrlParser: true }
.Esto funcionará:
fuente
Debe agregar
{ useNewUrlParser: true }
el método mongoose.connect ().fuente
El formato de la cadena de conexión debe ser mongodb: // usuario: contraseña @ host: puerto / db
Por ejemplo:
fuente
MongoClient.connect('mongodb://127.0.0.1:27017/yourDB', { useNewUrlParser: true } )
también funciona.Solo necesita configurar lo siguiente antes de conectarse a la base de datos como se muestra a continuación:
También,
fuente
correct
si hubiera funcionado para usted. ¡Funcionó para mí también!Lo siguiente funciona para mi
La
mongoose
versión es5.8.10
.fuente
body-parser": "^1.19.0", "express": "^4.17.1", "mongoose": "^5.9.14"
No creo que necesites agregar
{ useNewUrlParser: true }
.Depende de usted si ya desea utilizar el nuevo analizador de URL. Finalmente, la advertencia desaparecerá cuando MongoDB cambie a su nuevo analizador de URL.
Como se especifica en el Formato de URI de la cadena de conexión , no necesita establecer el número de puerto.
Solo agregar
{ useNewUrlParser: true }
es suficiente.fuente
useNewUrlParser: true
desaparecerá la advertencia. Pero eso es un poco estúpido ya que este parámetro adicional se volverá obsoleto una vez que Mongo cambie a su nuevo analizador de URL.Actualizado para ECMAScript 8 / await
El código de demostración ECMAScript 8 incorrecto que MongoDB inc proporciona también crea esta advertencia.
MongoDB proporciona el siguiente consejo, que es incorrecto
Hacer esto provocará el siguiente error:
En su
new MongoClient
lugar , se debe proporcionar la opción para :Vea el código a continuación:
fuente
El problema se puede resolver dando el número de puerto y usando este analizador:
{useNewUrlParser: true}
La solución puede ser:
Resuelve mi problema.
fuente
useNewUrlParser property
enconnect
, pero su solución ayudó. tan votado!El ejemplo completo para Express.js, el caso de llamadas API y el envío de contenido JSON es el siguiente:
fuente
Así es como lo tengo. La pista no apareció en mi consola hasta que actualicé npm un par de días antes.
.connect tiene tres parámetros, el URI, las opciones y err.
fuente
Estábamos usando:
→ Esto da un error de analizador de URL
La sintaxis correcta es:
fuente
Solo necesitas agregar
dentro del método mongoose.connect.
fuente
El siguiente trabajo para mí para la versión 5.9.16
fuente
Estas líneas también sirvieron para todas las demás advertencias de desaprobación:
fuente
Estaba usando mlab.com como la base de datos MongoDB. Separé la cadena de conexión a una carpeta diferente llamada
config
y dentro del archivo keys.js Mantuve la cadena de conexión que era:Y el código del servidor era
Debe escribir {useNewUrlParser: true} después de la cadena de conexión como hice anteriormente.
En pocas palabras, debe hacer:
fuente
Estoy usando Mongoose versión 5.x para mi proyecto. Después de requerir el paquete de mangosta, establezca el valor globalmente como se muestra a continuación.
fuente
Si tiene
username
opassword
tiene el@
personaje, úselo así:fuente