Estoy usando mongoose y mocha para el diseño del esquema MongoDB y el desarrollo de la API. Recibo esta advertencia... ¿qué significa esto, cómo me afectará y cuál es la solución?
Debajo del texto de advertencia real:
(nodo: 9872) Advertencia de desuso: la escucha de eventos en la clase Db ha quedado obsoleta y se eliminará en la próxima versión principal.
Pero, por lo que sé, es un error de compatibilidad de la nueva versión, después de buscar sobre esta versión de error actual, encontré esta sesión de comentarios y, según uno de ellos, es seguro ignorar esta advertencia.
ACTUALIZAR
mongodb@3.6.5 está fuera.
Simplemente actualice el controlador mongodb y la mangosta:
npm i mongodb mongooseEsto es causado por el controlador nativo mongodb@3.6.4 que utiliza mongoose.
#1 Puede degradar mongodb a la versión 3.6.3 ( descrito aquí ).
#2 O rebaje la mangosta del 5.11.16 al 5.11.15:
npm uninstall mongoose npm install mongoose@5.11.15#3 O simplemente espera el lanzamiento de mongodb@3.6.5.
Puedes usar mongoose versión 5.11.13
Si está utilizando mongoose versión 5.11.16 o una versión superior, verá este error. Puede resolver este problema degradándolo a la versión 5.11.15.
npm desinstalar mangosta
npm i mangosta@5.11.15
Aunque esto se está discutiendo en la comunidad y en muchas secciones de comentarios, es una advertencia debido a un error de compatibilidad y puede que no esté de más ignorarlo. Se sugiere que lo arreglen en la próxima actualización.
Para todos aquellos que buscan una respuesta para esto, hay una pregunta publicada en el foro de Mongodb y la persona interesada en Mongodb reconoce la respuesta.
La respuesta dada por @kmgt es correcta. El error se puede ignorar de manera segura y se solucionará en la próxima versión del controlador Mongodb Nodejs o se ayudará a degradar la versión de Mongoose a 5.11.15.
OK, entonces encontré una solución para este problema.
Tarea: Cargue la imagen en mongoDB como datos binarios, usando cubos, fragmentos, etc.
Código:
const express = require("express"); const router = express.Router(); const User = require('../models/user'); const grid = require('gridfs-stream'); const GridFsStorage = require('multer-gridfs-storage'); const util = require("util"); const crypto = require('crypto'); const path = require('path'); const methodOverride = require('method-override'); const bodyParser = require('body-parser'); const dotenv = require("dotenv").config({path: "./config/config.env"}); const multer = require('multer'); const storage = new GridFsStorage({ url: process.env.MONGO_URI, options: { useUnifiedTopology: true }, file: (req, file) => { return new Promise((resolve, reject) => { crypto.randomBytes(16, (err, buf) => { if (err) { return reject(err); } const filename = buf.toString('hex') + path.extname(file.originalname); const fileInfo = { filename: filename, bucketName: 'uploads' }; resolve(fileInfo); }); }); } }); var uploadFile = multer({storage: storage}).single("file"); var uploadFilesMiddleware = util.promisify(uploadFile); module.exports = uploadFilesMiddleware;Problema:
Advertencia de obsolescencia La escucha de eventos en la clase Db ha quedado obsoleta y se eliminará en la próxima versión principal.
Reparar:
Así que lo más probable es que el problema no sea por ti. Está en el paquete mismo. (consulte el enlace de referencia anterior)
Vaya a la carpeta node_modules (es esa carpeta con muchos archivos) en su aplicación node_js.
Vaya a multer-gridfs-storage (dentro de node_modules)
Vaya a la carpeta lib (dentro de multer-gridfs-storage)
Abrir gridfs.js
Encuentra este comentario (// Estos son todos los eventos que emiten errores)
Reemplazar esto
this.db .on('error', errEvent) .on('parseError', errEvent) .on('timeout', errEvent) .on('close', errEvent);
Con este
this.client .on('error', errEvent) .on('parseError', errEvent) .on('timeout', errEvent) .on('close', errEvent);Básicamente cambie reemplazar 'db' con 'cliente'.
También puede ir a la página oficial y ver los problemas actuales allí, se menciona claramente que el almacenamiento de multer-gridfs tiene un problema de advertencia de debricación.