微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决DeprecationWarning:在 Db 类上监听事件已被弃用,将在下一个主要版本中删除

我正在使用 mongoose 和 mocha 进行 MongoDB 模式设计和 API 开发 我收到此警告... 这是什么意思,它将如何影响我以及修复方法是什么??

在实际警告文本下方:

(node:9872) DeprecationWarning:监听 Db 类的事件已被弃用,将在下一个主要版本中删除

解决方法

更新

mongodb@3.6.5 出来了。

只需更新 mongodb 驱动和 mongoose:

npm i mongodb mongoose

这是由 mongoose 使用的 mongodb@3.6.4 native driver 引起的。

#1您可以将 mongodb 降级到版本 3.6.3 (described here)。

#2 或者将 mongoose 从 5.11.16 降级回 5.11.15:

npm uninstall mongoose
npm install mongoose@5.11.15

#3 或者就等 mongodb@3.6.5 发布。

,

对于所有正在寻找答案的人,Mongodb 论坛上发布了一个问题,Mongodb 相关人员已确认答案。

@kmgt 给出的答案是正确的。 可以安全地忽略该错误,并将在即将发布的 Mongodb Nodejs 驱动程序中修复,或者将 Mongoose 版本降级到 5.11.15 会有所帮助。

(node:44612) DeprecationWarning: Listening to events on the Db class has been deprecated and will be removed in the next major version

,

同样的错误 enter image description here

但据我所知,这是一个新版本兼容性错误,在搜索了当前的错误版本后,我发现了这个 comment session 并且根据其中之一,可以安全地忽略此警告。

,

如果您使用的是 mongoose 版本 5.11.16 或更高版本,您将看到此错误。您可以通过将其降级到 5.11.15 版本来解决此问题。

npm 卸载猫鼬

npm 我猫鼬@5.11.15

尽管社区和许多评论部分正在讨论这一点,但由于兼容性错误,这是一个警告,忽略它可能没有害处。建议他们在下一次更新中修复它。

,

您可以使用 mongoose 版本 5.11.13

,

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

任务:将图像作为二进制数据上传到 mongoDB,使用桶、块等

Reference URL

代码:

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_modules(就是一个文件夹,里面有很多文件) node_js 应用程序中的文件夹。

  2. 转到 multer-gridfs-storage(在 node_modules 中)

  3. 转到 lib 文件夹(在 multer-gridfs-storage 内)

  4. 打开 gridfs.js

  5. 找到这条评论(//这是所有发出错误的事件)

  6. 替换这个

    这个.db .on('错误',errEvent) .on('parseError',errEvent) .on('超时',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 问题。

Issue Link

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。