簡體   English   中英

在MEAN堆棧中不推薦使用Mongoose的默認Promise庫

[英]Mongoose's default promise library is deprecated in MEAN stack

我正在嘗試啟動MEAN堆棧服務器,但是卻收到此錯誤消息:

貓鼬:mpromise(貓鼬的默認諾言庫)已過時,請插入您自己的諾言庫: http ://mongoosejs.com/docs/promises.html

我嘗試在此處搜索一些答案,但發現的答案對我來說還不夠清楚:

(節點:3341)棄用警告:貓鼬:mpromise

我找到了名為mongoose.connect的文件,但是關於該問題的代碼對我不起作用,有人可以為我解釋它的工作原理嗎?

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

mongoose.Promise = global.Promise;

我通常連接到MongoDB的方式是使用Bluebird Promise庫。 您可以在這篇文章中了解更多信息 運氣好的話,下面的代碼片段將幫助您入門,因為這是我在進行原型制作時所使用的。

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

最新的貓鼬庫,請勿使用任何默認的Promise庫。 從Mongoose v 4.1.0起,您可以插入自己的庫。

如果您使用的是Mongoose庫(不是底層的MongoDB驅動程序),則可以插入Promise庫,如下所示:

 //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設置了mongoose不使用驅動程序的Promise。 在這種情況下,您可以使用以下代碼。

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

為我工作。

貓鼬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
        });
    }
});

暫無
暫無

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

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