2016-08-30 47 views
6

我試圖啓動一個MEAN堆棧服務器,但我收到此錯誤信息:貓鼬的默認承諾庫平均棄用棧

貓鼬:mpromise(貓鼬的默認承諾庫)已被棄用,插入自己的諾言庫,而不是:http://mongoosejs.com/docs/promises.html

我試圖在這裏尋找一些答案,但我發現了一個還不夠清楚對我來說:

(node:3341) DeprecationWarning: Mongoose: mpromise

我找到了調用mongoose.connect的文件,但是關於這個問題的代碼並不適用於我,任何人都可以爲我解釋它是如何工作的?

+0

那你嘗試什麼也沒有關於它的工作? – JohnnyHK

+0

我只是遵循Mongodb教程和平均堆棧教程,但服務器沒有安裝sart。當我嘗試訪問// localhost:3000 /此錯誤顯示在我的終端中,並且服務器從不啓動。 –

+0

此消息不是錯誤,它只是一個警告。所以問題可能在其他地方。 – JohnnyHK

回答

10

使用此代碼,在mongo連接之前,這將解決承諾問題。

mongoose.Promise = global.Promise; 
2

我通常連接到MongoDB的方式是使用Bluebird承諾庫。你可以在this post瞭解更多關於它的信息。如果幸運的話,下面的代碼片段將幫助您開始使用,因爲它是我在原型設計時使用的。

let mongoose = require('mongoose'); 
let promise = require('bluebird'); 
let uri = 'mongodb://localhost:27017/your_db'; 
mongoose.Promise = promise; 
let connection = mongoose.createConnection(uri); 
+0

不是一個壞主意,可以詳細闡述一下你將如何實現它。 –

2

最新貓鼬庫,不要使用任何默認承諾庫。從Mongoose v 4.1.0開始,您可以插入自己的圖書館。

如果您正在使用貓鼬庫(不包括基礎MongoDB的驅動程序)那麼您可以在諾庫插件這樣的:

//using Native Promise (Available in ES6) 
 
mongoose.Promise = global.Promise; 
 

 
//Or any other promise library 
 
mongoose.Promise = require('bluebird'); 
 

 
//Now create query Promise 
 
var query = someModel.find(queryObject); 
 
var promise = query.exec();

如果您正在使用MongoDB的驅動程序然後你將需要做一些額外的努力。因爲,mongoose.Promise設置貓鼬不使用驅動程序的諾言。在這種情況下,您可以使用下面的代碼。

// Use bluebird 
 
var options = { promiseLibrary: require('bluebird') }; 
 
var db = mongoose.createConnection(uri, options);

+0

感謝Tolsee,我之前提出過這個問題,因爲他們,我沒有必須和mongo一起工作,我會在下週開始一個關於Mongo的新課程,所以如果我再次遇到這個問題,我會檢查你的回答。 –

1

爲我工作。

貓鼬v4.11.7解決承諾問題

const mongoose = require('mongoose'); 
mongoose.Promise = global.Promise; 
mongoose.connection.openUri('mongodb://127.0.0.1:27017/app_db', { /* options */ }); 

貓鼬#save()

var article = new Article(Obj); 
article.save().then(function(result) { 
    return res.status(201).json({ 
     message: 'Saved message', 
     obj: result 
    }); 
}, function (err) { 
    if (err) { 
     return res.status(500).json({ 
      title: 'Ac error occurred', 
      error: err 
     }); 
    } 
});