弃用警告:在Db类上监听事件已弃用,并将在下一个主要版本中删除。

61
我正在使用mongoose和mocha进行MongoDB模式设计和API开发。我收到了以下警告... 这是什么意思,它会对我产生什么影响,如何解决?
下面是实际的警告文本:
(node:9872) DeprecationWarning: Listening to events on the Db class has been deprecated and will be removed in the next major version.

1
这个回答解决了你的问题吗?如何在MongoDB中移除这个弃用警告,为什么会出现? - Peter O.
6个回答

77

更新

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 版本的发布。


2
@kmgt 我在使用mongoose版本^5.10.12和Mongodb版本4.4时遇到了错误,应该怎么办?是否仍需要使用mongoose版本5.11.15 - Avani Khabiya
好的。我之前把它当作Mongodb版本了,实际上是Mongodb驱动程序版本。是的,安装的Mongodb驱动程序版本是3.6.3 - Avani Khabiya
@kmgt 这个警告是否可以忽略,还是我需要降级 Mongoose?由于降级 MongoDB 驱动程序不是一个选项,我已经安装了版本 3.6.3 - Avani Khabiya
你分享的链接是关于另一个警告的,警告内容为:警告:在循环依赖中访问模块导出的不存在的属性'MongoError'。包含上述错误的最后一条评论尚未得到MongoDB相关人员的确认。 - Avani Khabiya
2
有一个依赖。学习这个 - ztom
显示剩余2条评论

11

8

同样的错误 在此输入图片描述

但据我所知,这是一个新版本兼容性问题,在搜索有关此当前版本的错误时,我发现了这个评论会话,根据其中的一条评论,可以安全地忽略此警告。


1
是的,但这些警告(我在其他软件包中也看到过类似的)会在命令行上产生很多噪音。 - Wayne Smallman

3
如果您使用的mongoose版本为5.11.16或更高版本,您将会看到这个错误。您可以通过降级至5.11.15版本来解决这个问题。

npm uninstall mongoose

npm i mongoose@5.11.15

尽管社区和许多评论部分正在讨论此问题,以及这是由于兼容性错误而产生的警告,忽略它可能不会有害。建议在下一个更新中修复该问题。

2
您可以使用Mongoose 5.11.13版本。

3
降级到mongoose 5.11.15就足够了。根据changelog,"升级到mongodb driver 3.6.4"是在5.11.16中发生的。 - Michael Geier

1

好的,我找到了解决这个问题的方法。

任务:将图像作为二进制数据上传到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 类的事件已被弃用,并将在下一个主要版本中删除。

解决方法:

所以,很可能问题不是因为你而引起的。它是包本身的问题。(请查看上面的参考链接)

  1. 进入您的 node_js 应用程序中的 node_modules 文件夹(那个有很多文件的文件夹)。

  2. 进入 multer-gridfs-storage 文件夹(位于 node_modules 中)

  3. 进入 lib 文件夹(位于 multer-gridfs-storage 内部)

  4. 打开 gridfs.js 文件

  5. 找到此注释(// 这些都是发出错误的所有事件)

  6. 使用以下内容替换此内容

    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问题。

问题链接


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接