在 MEAN 技术栈中,Mongoose 的默认 Promise 库已被弃用。

7
我在尝试启动一个MEAN-stack服务器,但是出现了这个错误信息:

Mongoose: mpromise(mongoose的默认承诺库)已经被弃用,请使用自己的承诺库代替:http://mongoosejs.com/docs/promises.html

我尝试在这里搜索答案,但是找到的那篇文章对我来说并不清楚:

(node:3341) DeprecationWarning: Mongoose: mpromise

我找到了调用mongoose.connect的代码文件,但是该问题的代码对我无效,有人能为我解释一下它是如何工作的吗?

你尝试了什么?具体哪些方面没有起作用? - JohnnyHK
我刚刚按照Mongodb教程和MEAN-stack教程操作,但服务器没有启动。当我尝试访问//localhost:3000/时,终端显示了这些错误,并且服务器从未启动。 - Joao Luiz Magalhaes
这个消息不是错误,只是一个警告。因此问题很可能出现在其他地方。 - JohnnyHK
那我该怎么找到它呢?因为这是终端显示的唯一消息?我只是按照教程操作,但它不起作用。 - Joao Luiz Magalhaes
1
KARTHIKEYAN.A 给出了你的问题的正确答案。它将抑制你所看到的警告。如果你想使用外部的 promise 库,比如 bluebird 或 q,你可以跟随 Wuriyanto。这取决于你有多在意使用已弃用的代码/方法。@Joao Luiz Magalhaes 如果还有其他问题,请发布一小段代码。 - allegory
4个回答

11

在连接Mongo之前,请使用此代码,它将解决Promise问题。

mongoose.Promise = global.Promise;

2
最新的mongoose库不使用任何默认的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 而不是驱动程序的 Promise。在这种情况下,您可以使用以下代码。

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


谢谢Tolsee,我之前问过这个问题,自那以后,我没有再处理Mongo了。下周我将开始一门关于Mongo的新课程,所以如果我再次遇到这个问题,我会查看你的答案。 - Joao Luiz Magalhaes

2

请为我工作。

Mongoose v4.11.7 解决了 Promise 问题。

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

Mongoose #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
        });
    }
});

2

我通常使用Bluebird promise库连接MongoDB。您可以在这篇文章中了解更多信息。以下代码片段将帮助您入门,因为它是我在原型设计时使用的。

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

详细阐述一下你打算如何实现它并不是一个坏主意。 - Amir Koklan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接