2017-02-22 85 views
0

爲什麼我試圖在終端中運行node file.js時會收到此錯誤消息?我嘗試在「mongoose.connect ...」之前加入「mongoose.Promise = global.Promise」,但它仍然無效。「Mongoose mpromise已被棄用」錯誤

DeprecationWarning:貓鼬: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(); 
} 
+0

這不是一個錯誤,它是一個警告。 –

+0

似乎是一個重複:http://stackoverflow.com/questions/38138445/node3341-deprecationwarning-mongoose-感謝 –

回答

0

我有同樣的問題。要擺脫警告,你必須添加「mongoose.Promise = global.Promise」到文件,你需要貓鼬。

1

錯誤表示Mongoose的默認承諾庫已被棄用,請插入自己的承諾庫。

默認情況下,當您使用Mongoose時,它具有插入到其中的默認承諾庫。它使用了貓鼬附帶的mpromise

因此,它有一個promise庫的默認實現,但是,無論出於何種原因,它們都不希望您再使用它。

相反,您有幾個使用自己的承諾庫的選項。 Nodejs社區中最受歡迎的是Bluebird,Q或ES6 Promises。

我建議你使用ES6 Promise,因爲它將絕對滿足你對Mongoose出現的承諾所需的一切。

如果這看起來有些武斷,比如爲什麼不讓Mongoose爲我們弄清楚這一點。 Mongoose這樣做可以給我們更多的靈活性,讓我們可以承諾實現我們想要使用的實現,對於某些用戶來說,這非常重要。對於一些項目來說,它是你要關心的東西,但是,當你第一次開始使用它時,你並不是很擔心它。

所以,你所要做的就是修復了貓鼬的內部承諾庫:

在文件的最頂端,你有這樣的:

const mongoose = require('mongoose'); 

下方的它,你將要寫:

mongoose.Promise = global.Promise; 

所以,在左邊我們說哎Mongoose,只要你想創建任何類型的相互作用與數據庫WHA一個承諾不過,我們希望你使用這個承諾庫的實現。

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

所以,我們用這段代碼說,只要你需要實現一個promise,只需使用ES6實現。