tutorial route node node.js mongodb typescript express mongoose

node.js - route - typescript express mongodb



Evite la advertencia de que "el analizador de cadenas URL actuales está en desuso" configurando useNewUrlParser en verdadero (16)

Tengo una clase de envoltura 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) Advertencia de desaprobación: el analizador de cadena 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 método connect() acepta una instancia de MongoClientOptions como segundo argumento. Pero no tiene una propiedad llamada useNewUrlParser . También intenté establecer esas propiedades en la cadena de conexión de esta forma: mongodb://127.0.0.1/my-db?useNewUrlParser=true pero no tiene efecto en esas advertencias.

Entonces, ¿cómo puedo configurar useNewUrlParser para eliminar esas advertencias? Esto es importante para mí, ya que la secuencia de comandos debe ejecutarse como cron y esas advertencias dan como resultado correo basura no deseado.

Estoy usando el controlador mongodb en la versión 3.1.0-beta4 con el correspondiente paquete @types/mongodb en 3.0.18 . Ambos son los últimos disponibles con npm install .

Solución

Usando una versión anterior del controlador mongodb:

"mongodb": "~3.0.8", "@types/mongodb": "~3.0.18"


Actualizado para ES8 / await

El código de demostración ES8 incorrecto que proporciona MongoDB inc también crea esta advertencia.

MongoDB proporciona el siguiente consejo, que es incorrecto

Para usar el nuevo analizador, pase la opción {useNewUrlParser: true} a MongoClient.connect.

Hacer esto causará el siguiente error:

TypeError: el argumento final para executeOperation debe ser una devolución de llamada

En su lugar, la opción debe proporcionarse a new MongoClient :

Vea el código a continuación:

const DATABASE_NAME = ''mydatabase'', URL = `mongodb://localhost:27017/${DATABASE_NAME}` module.exports = async function() { const client = new MongoClient(URL, {useNewUrlParser: true}) var db = null try { // Note this breaks. // await client.connect({useNewUrlParser: true}) await client.connect() db = client.db(DATABASE_NAME) } catch (err) { console.log(err.stack) } return db }


Así es como lo tengo, la sugerencia no se mostró en mi consola hasta que actualicé npm un par de días antes.

.connect tiene 3 parámetros, el URI, opciones y error.

mongoose.connect( keys.getDbConnectionString(), { useNewUrlParser: true }, err => { if (err) throw err; console.log(`Successfully connected to database.`); } );


Como se señaló, la versión 3.1.0-beta4 del controlador se "liberó en la naturaleza" un poco antes por el aspecto de las cosas. La versión es parte del trabajo en curso para admitir las funciones más nuevas en la próxima versión de MongoDB 4.0 y realizar otros cambios en la API.

Uno de esos cambios que activan la advertencia actual es la opción useNewUrlParser , debido a algunos cambios en torno a cómo funciona realmente la useNewUrlParser del URI de conexión. Más sobre eso más adelante.

Hasta que las cosas se "calmen", probablemente sería recomendable "fijar" al menos a la versión secundaria para 3.0.x versiones 3.0.x :

"dependencies": { "mongodb": "~3.0.8" }

Eso debería hacer que la rama 3.1.x se instale en las instalaciones "nuevas" de los módulos de nodo. Si ya instaló una versión "más reciente" que es la versión "beta", debe limpiar sus paquetes (y package-lock.json ) y asegurarse de que la descarga a una 3.0.x serie 3.0.x

En cuanto al uso real de las "nuevas" opciones de URI de conexión, la principal restricción es incluir el port en la cadena de conexión:

const { MongoClient } = require("mongodb"); const uri = ''mongodb://localhost:27017''; // mongodb://localhost - will fail (async function() { try { const client = await MongoClient.connect(uri,{ useNewUrlParser: true }); // ... anything client.close(); } catch(e) { console.error(e) } })()

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 código del repositorio "node-native-driver" (npm mongodb ), y el "nuevo código" se importa realmente desde la biblioteca mongodb-core que "apuntala" el nodo "público" conductor.

El punto de la "opción" que se agrega es "facilitar" la transición al agregar la opción al nuevo código, de modo que el analizador más nuevo (en realidad basado en la url ) se use en el código, agregue la opción y borre la advertencia de desaprobación y, por lo tanto, verifique que las cadenas de conexión pasadas cumplan con lo que espera el nuevo analizador.

En versiones futuras, el analizador "heredado" se eliminaría y, a continuación, 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 para probar sus cadenas de conexión existentes contra lo que el nuevo analizador está esperando.

Entonces, si desea comenzar a usar las nuevas funciones del controlador a medida que se lanzan, entonces use la beta disponible y las posteriores y, de manera ideal, asegúrese de proporcionar una cadena de conexión que sea válida para el nuevo analizador habilitando la opción MongoClient.connect() en MongoClient.connect() .

Si en realidad no necesita acceder a las funciones relacionadas con la vista previa de la versión MongoDB 4.0, fije la versión a una serie 3.0.x como se indicó anteriormente. Esto funcionará como se documenta y se "fija"; esto garantiza que 3.1.x versiones 3.1.x no se "actualicen" con respecto a la dependencia esperada hasta que realmente desee instalar una versión estable.


El código resaltado a continuación para la conexión de la mangosta solucionó la advertencia para el controlador de la mangosta

mongoose.connect(''mongodb://localhost:27017/test'', { useNewUrlParser: true });


El ejemplo completo para ExpressJS, el caso de llamadas de api y el envío de json es el siguiente:

... app.get(''/api/myApi'', (req, res) => { MongoClient.connect(''mongodb://user:[email protected]:port/dbname'', { useNewUrlParser: true }, (err, db) => { if (err) throw err const dbo = db.db(''dbname'') dbo.collection(''myCollection'') .find({}, { _id: 0 }) .sort({ _id: -1 }) .toArray( (errFind, result) => { if (errFind) throw errFind const resultJson = JSON.stringify(result) console.log(''find:'', resultJson) res.send(resultJson) db.close() }, ) }) }


El formato de la cadena de conexión debe ser mongodb: // usuario: contraseña @ host: puerto / db

p.ej:

MongoClient.connect(''mongodb://user:[email protected]:27017/yourDB'', { useNewUrlParser: true } )


El problema se puede resolver dando el número de puerto y usando este analizador {useNewUrlParser: true}. La solución puede ser:

mongoose.connect("mongodb://localhost:27017/cat_app", { useNewUrlParser: true });

Resuelve mi problema.


Estaba usando mlab.com como base de datos mongo. Separé la cadena de conexión a una carpeta diferente llamada config y dentro de keys.js mantuve la cadena de conexión que era

module.exports = { mongoURI: "mongodb://username:[email protected]:47267/projectname" };

y el código del servidor era

const express = require("express"); const mongoose = require("mongoose"); const app = express(); //DB config const db = require("./config/keys").mongoURI; //connect to mongo DB mongoose .connect( db, { useNewUrlParser: true } //need this for api support ) .then(() => console.log("mongoDB connected")) .catch(err => console.log(err)); app.get("/", (req, res) => res.send("hello!!")); const port = process.env.PORT || 5000; app.listen(port, () => console.log(`Server running on port ${port}`)); //tilda not inverted comma

necesitas escribir {useNewUrlParser: true} después de la cadena de conexión como lo hice anteriormente.

simplemente hay que hacer lo que tiene que hacer:

mongoose.connect(connectionString,{ useNewUrlParser: true } //or MongoClient.connect(connectionString,{ useNewUrlParser: true }


Estas líneas hicieron el truco para todas las demás advertencias de desprecio también:

const db = await mongoose.createConnection(url, { useNewUrlParser: true }); mongoose.set(''useCreateIndex'', true); mongoose.set(''useFindAndModify'', false);


No creo que necesites agregar { useNewUrlParser: true } .

Depende de usted si desea utilizar el nuevo analizador de url ya. Eventualmente, la advertencia desaparecerá cuando Mongo cambie a su nuevo analizador de URL.

Edición: como se especifica aquí https://docs.mongodb.com/master/reference/connection-string/ no necesita configurar el número de puerto.

Solo agregando { useNewUrlParser: true } es suficiente.


No hay nada que cambiar, pase solo en la función de conexión {useNewUrlParser: true } esto funcionará

MongoClient.connect(url,{ useNewUrlParser: true },function(err,db){ if(err){ console.log(err); } else { console.log(''connected to ''+ url); db.close(); } })


Revisa tu versión mongo

mongo --version

Si está utilizando la versión> = 3.1.0, cambie el archivo de conexión de mongo a ->

MongoClient.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true })

o su archivo de conexión de mangosta a ->

mongoose.connect("mongodb://localhost:27017/YourDB", { useNewUrlParser: true });

Lo ideal es que sea una característica de la versión 4, pero v3.1.0 y superior también la admiten. Echa un vistazo a MongoDB Github para más detalles.


Si el username o password tiene @ carácter. Entonces usa asi

mongoose .connect( ''DB_url'', { user: ''@dmin'', pass: ''p@ssword'', useNewUrlParser: true } ) .then(() => console.log(''Connected to MongoDB'')) .catch(err => console.log(''Could not connect to MongoDB'', err));


solo necesitas agregar

{useNewUrlParser: true}

Dentro del metodo de mongoose.connect


{ useNewUrlParser: true } agregar { useNewUrlParser: true } en el método mongoose.connect ().

mongoose.connect(''mongodb://localhost:27017/Notification'',{ useNewUrlParser: true });


**We were using** mongoose.connect("mongodb://localhost/mean-course").then( (res) => { console.log("Connected to Database Successfully.") } ).catch(() => { console.log("Conntection to database failed."); }); *-----> This gives url parser error* **Correct Syntax is**: mongoose.connect("mongodb://localhost:27017/mean-course" , { useNewUrlParser: true }).then( (res) => { console.log("Connected to Database Successfully.") } ).catch(() => { console.log("Conntection to database failed."); });