簡體   English   中英

“不推薦貓鼬mpromise”錯誤

[英]“Mongoose mpromise is deprecated” error

當我嘗試在終端中運行節點file.js時,為什么仍不斷收到此錯誤消息? 我嘗試在“ mongoose.connect ...”之前添加“ mongoose.Promise = global.Promise”,但是它仍然無法正常工作。

棄用警告:貓鼬:mpromise(貓鼬的默認諾言庫)已過時,請插入您自己的諾言庫: 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();
}

該錯誤表明Mongoose的默認Promise庫已過時,請插入您自己的Promise庫。

默認情況下,當您使用Mongoose時,它將插入一個默認的Promise庫。 它使用貓鼬隨附的mpromise

因此,它具有Promise庫的默認實現,但是由於任何原因,他們都不希望您再使用它。

相反,您可以使用自己的Promise庫有兩個選擇。 Nodejs社區中最受歡迎的是Bluebird,Q或ES6 Promises。

我建議您使用ES6 Promises,因為它將絕對滿足您從貓鼬發出的諾言所需的一切。

如果這看起來有些武斷,比如為什么貓鼬不為我們解決這個問題。 貓鼬這樣做是為了給我們更大的靈活性,讓我們可以使用我們希望使用的promise實現,這對於某些用戶而言確實非常重要。 對於某些項目,這是您要關心的事情,但是,當您第一次開始時,您並不需要為此擔心很多。

因此,您要做的就是修復Mongoose的內部promise庫:

在文件的最上方,您具有以下內容:

const mongoose = require('mongoose');

在它的下面,您將要編寫:

mongoose.Promise = global.Promise;

因此,在左邊我們說的是Mongoose ,只要您想為與數據庫的任何形式的交互創建一個Promise,我們都希望您使用Promise庫的此實現。

global.Promise是對Nodejs環境中的promises的ES6實現的引用。

因此,我們說的是這段代碼,每當您需要實現承諾時,只需使用ES6實現即可。

我遇到了同樣的問題。 要擺脫警告,您必須在需要貓鼬的每個文件中添加“ mongoose.Promise = global.Promise”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM