I am using mongoose and mocha for MongoDB schema design and API development I am getting this warning... what does this mean, how it will affect me and what is the fix??
Below the actual warning text:
(node:9872) DeprecationWarning: Listening to events on the Db class has been deprecated and will be removed in the next major version.
For all those looking for an answer for this, there is a question posted on Mongodb forum and the answer is acknowledged by Mongodb concerned person.
The answer given by @kmgt is correct. The error can be ignored safely and will be fixed in upcoming release of Mongodb Nodejs driver or downgrading Mongoose version to 5.11.15 will help.
If you are using mongoose version 5.11.16 or a higher version, you will see this error. You can solve this issue by downgrading it to version 5.11.15.
npm uninstall mongoose
npm i mongoose@5.11.15
Although this is being discussed in the community and many comment sections and it is a warning because of a compatibility bug and it might not harm to ignore it. It is suggested that they will fix it in the next update.
But As far as I know its a new version compatibility bug, after searching about this current bug version, I found this comment session and according to one of them, it is safe to ignore this warning.
UPDATE
mongodb@3.6.5 is out.
Just update mongodb driver and mongoose:
npm i mongodb mongoose
This is caused by the mongodb@3.6.4 native driver which is used by mongoose.
#1 You can downgrade mongodb to version 3.6.3 (described here).
#2 Or downgrade mongoose from 5.11.16 back to 5.11.15:
npm uninstall mongoose
npm install mongoose@5.11.15
#3 Or just wait for the release of mongodb@3.6.5.
You can use mongoose version 5.11.13
OK so I found a fix for this problem.
Task : Upload Image on mongoDB as binary data, using buckets, chunks etc.
Code:
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;
Problem:
Deprecation Warning Listening to events on the Db class has been deprecated and will be removed in the next major version.
Fix:
So most probably the problem is not because of you. It is in the package itself. (check out the reference link above)
Go to node_modules (it is that one folder with a lot of files) folder in your node_js application.
Go to multer-gridfs-storage (inside node_modules)
Go to lib folder (inside multer-gridfs-storage)
Open gridfs.js
Find this comment (// This are all the events that emit errors)
Replace This
this.db .on('error', errEvent) .on('parseError', errEvent) .on('timeout', errEvent) .on('close', errEvent);
With this
this.client
.on('error', errEvent)
.on('parseError', errEvent)
.on('timeout', errEvent)
.on('close', errEvent);
Basically change replace 'db' with 'client'.
You can also go to the official page and check out the current issues there it is clearly mentioned that multer-gridfs-storage has debrication waring issue.