mongodb “ Mongoose 的承诺被弃用”

m4pnthwp  于 2023-08-04  发布在  Go
关注(0)|答案(2)|浏览(70)

我在Mac终端运行node file.js时收到此错误消息。我的终端没有任何特殊的配置。我尝试在“mongoose.connect."之前添加“mongoose.Promise = global.Promise”。
弃用警告:Mongoose:mpromise(mongoose的默认promise库)已弃用,请插入您自己的promise库:http://mongoosejs.com/docs/promises.html
下面是源代码:

var Product = require('../models/product');

var mongoose = require('mongoose');

mongoose.Promise = global.Promise;

mongoose.connect('localhost:27017/shopping');

var products = [
    new Product({
        imagePath: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png', 
        title: 'Gothic 5 Video Game',
        description: 'Awesome Game!!!!',
        price: 10
    }),
    new Product({
        imagePath: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png', 
        title: 'Gothic 4 Video Game',
        description: 'Also Awesome Game!!!!',
        price: 20
    }),
    new Product({
        imagePath: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png', 
        title: 'Gothic 3 Video Game',
        description: 'best game ever!!!!',
        price: 15
    }),
    new Product({
        imagePath: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png', 
        title: 'Gothic 2 Video Game',
        description: 'top notch!!!',
        price: 50
    })
];

var done = 0;
for (var i = 0; i < products.length; i++) {
    products[i].save(function(err, result){
        done++;
        if (done === products.length) {
            exit();
        }
    });
}

function exit() {
    mongoose.disconnect();
}

字符串

erhoui1w

erhoui1w1#

这个错误说Mongoose的默认promise库已被弃用,请插入您自己的promise库。
默认情况下,当您使用Mongoose时,它会插入一个默认的promise库。它使用Mongoose附带的mpromise
因此,它有一个默认的promise库实现,但是,不管出于什么原因,他们不希望您再使用它。
相反,你有几个使用你自己的promise库的选项。Node.js社区中最受欢迎的是Bluebird、Q或ES6 Promises。
我建议你使用ES6 Promises,因为它绝对能满足你从Mongoose中获得Promise所需的一切。
如果这看起来有点武断,比如为什么 Mongoose 不为我们解决这个问题。Mongoose这样做是为了给予我们在使用promise实现时有更大的灵活性,这对一些用户来说非常重要。对于某些项目,这是您将要关心的事情,但是,当您第一次开始时,您并不真正担心它。
所以,你所要做的就是修复Mongoose的内部promise库:
在你的文件的最上面,你有这个:

const mongoose = require('mongoose');

字符串
下面你要写:

mongoose.Promise = global.Promise;


所以,在左手我们说嘿Mongoose,无论何时你想为任何类型的与数据库的交互创建一个promise,我们都希望你使用这个promise库的实现。
global.Promise是对Node.js环境中Promise的ES6实现的引用。
所以,我们在这段代码中说,每当你需要实现一个promise时,只需使用ES6实现。

cidc1ykv

cidc1ykv2#

我也有同样的问题。为了消除这个警告,你必须在每个需要mongoose的文件中添加“mongoose.promise = global.promise”。

相关问题