下面是实际的警告文本:
(node:9872) DeprecationWarning: Listening to events on the Db class has been deprecated and will be removed in the next major version.
更新
mongodb@3.6.5已发布。
只需更新mongodb驱动程序和mongoose:
npm i mongodb mongoose
这是由mongoose使用的mongodb@3.6.4 native driver引起的。
#1 您可以将mongodb降级到版本3.6.3(在此处描述)。
#2 或将mongoose从5.11.16降级回5.11.15:
npm uninstall mongoose
npm install mongoose@5.11.15
#3 或者等待 mongodb@3.6.5 版本的发布。
^5.10.12
和Mongodb版本4.4
时遇到了错误,应该怎么办?是否仍需要使用mongoose版本5.11.15
? - Avani Khabiya3.6.3
。 - Avani Khabiya3.6.3
。 - Avani Khabiya警告:在循环依赖中访问模块导出的不存在的属性'MongoError'
。包含上述错误的最后一条评论尚未得到MongoDB相关人员的确认。 - Avani Khabiya但据我所知,这是一个新版本兼容性问题,在搜索有关此当前版本的错误时,我发现了这个评论会话,根据其中的一条评论,可以安全地忽略此警告。
npm uninstall mongoose
尽管社区和许多评论部分正在讨论此问题,以及这是由于兼容性错误而产生的警告,忽略它可能不会有害。建议在下一个更新中修复该问题。npm i mongoose@5.11.15
好的,我找到了解决这个问题的方法。
任务:将图像作为二进制数据上传到mongoDB中,使用桶、块等。
代码:
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;
问题:
警告:监听 Db 类的事件已被弃用,并将在下一个主要版本中删除。
解决方法:
所以,很可能问题不是因为你而引起的。它是包本身的问题。(请查看上面的参考链接)
进入您的 node_js 应用程序中的 node_modules 文件夹(那个有很多文件的文件夹)。
进入 multer-gridfs-storage 文件夹(位于 node_modules 中)
进入 lib 文件夹(位于 multer-gridfs-storage 内部)
打开 gridfs.js 文件
找到此注释(// 这些都是发出错误的所有事件)
使用以下内容替换此内容
this.db .on('error', errEvent) .on('parseError', errEvent) .on('timeout', errEvent) .on('close', errEvent);
使用以下内容替换此内容:
this.client
.on('error', errEvent)
.on('parseError', errEvent)
.on('timeout', errEvent)
.on('close', errEvent);
基本上,将“db”替换为“client”。
您还可以转到官方页面并查看当前问题,其中明确提到multer-gridfs-storage存在Debrication Waring问题。