【问题标题】:"Mongoose mpromise is deprecated" error“不推荐使用 Mongoose 承诺”错误
【发布时间】:2017-07-11 22:50:44
【问题描述】:

当我尝试在终端中运行 node file.js 时,为什么会不断收到此错误消息?我尝试在“mongoose.connect ...”之前添加“mongoose.Promise = global.Promise”,但它仍然不起作用。

DeprecationWarning: Mongoose: mpromise(mongoose 的默认承诺库)已弃用,改为插入您自己的承诺库: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();
}

【问题讨论】:

标签: javascript node.js mongodb


【解决方案1】:

错误提示 Mongoose 的默认承诺库已弃用,请插入您自己的承诺库。

默认情况下,当您使用 Mongoose 时,它​​会插入一个默认的 Promise 库。它使用的是猫鼬自带的mpromise

因此,它有一个 promise 库的默认实现,但是,无论出于何种原因,他们不希望您再使用它。

相反,您可以通过多种方式使用自己的 Promise 库。 Node.js 社区中最受欢迎的是 Bluebird、Q 或 ES6 Promises。

我建议您使用 ES6 Promises,因为它绝对可以满足您从 Mongoose 发出的 Promise 所需的一切。

如果这看起来有点武断,比如为什么 Mongoose 不为我们解决这个问题。 Mongoose 这样做是为了让我们更灵活地使用我们想要使用的承诺实现,这对于某些用户来说非常重要。对于某些项目,这是您要关心的事情,但是,当您第一次开始使用它时,您并不太担心。

所以,你所要做的就是修复 Mongoose 的内部承诺库:

在你的文件的最顶部,你有这个:

const mongoose = require('mongoose');

下面你要写:

mongoose.Promise = global.Promise;

所以,在左边我们说,嘿Mongoose,无论何时你想为与数据库的任何类型的交互创建一个承诺,我们希望你使用这个承诺库的实现。

global.Promise 是对 Node.js 环境中 Promise 的 ES6 实现的引用。

因此,我们在这段代码中说,只要您需要实现一个 Promise,只需使用 ES6 实现即可。

【讨论】:

  • @halfer 我看到你的编辑日期,这个时候我们有猫鼬6?如果您不添加 mongoose.Promise = global.Promise,它的表现如何?我没有使用它,它似乎运行良好。只是好奇...谢谢
【解决方案2】:

我遇到了同样的问题。要消除警告,您必须将“mongoose.Promise = global.Promise”添加到您需要 mongoose 的每个文件。

【讨论】:

    猜你喜欢
    • 2017-07-28
    • 2017-05-12
    • 2019-06-13
    • 2020-05-23
    • 2012-08-03
    • 2019-10-13
    • 2018-09-14
    • 2017-07-05
    • 2014-11-04
    相关资源
    最近更新 更多