【问题标题】:Mongoose's default promise library is deprecated in MEAN stackMongoose 的默认 Promise 库在 MEAN 堆栈中已弃用
【发布时间】:2017-01-06 20:36:10
【问题描述】:

我正在尝试启动 MEAN-stack 服务器,但收到此错误消息:

Mongoose:不推荐使用 mpromise(mongoose 的默认承诺库),改为插入您自己的承诺库:http://mongoosejs.com/docs/promises.html

我试图在这里搜索一些答案,但我发现的答案对我来说不够清楚:

(node:3341) DeprecationWarning: Mongoose: mpromise

我找到了调用 mongoose.connect 的文件,但该问题的代码对我不起作用,谁能解释一下它是如何工作的?

【问题讨论】:

  • 您尝试了哪些方法,哪些方法没有奏效?
  • 我只是跟着Mongodb教程和MEAN-stack教程,但是服务器没有sarts。当我尝试访问 //localhost:3000/ 这个错误显示在我的终端中,并且服务器永远不会启动。
  • 此消息不是错误,只是警告。所以问题可能出在其他地方。
  • 那我怎样才能找到它呢?因为它是终端向我显示的唯一消息?只是按照教程,它不起作用。
  • KARTHIKEYAN.A 对您的问题有正确的答案。它将抑制您看到的警告。如果你想使用像 bluebird 或 q 这样的外部 Promise 库,你可以关注 Wuriyanto。这取决于您对使用已弃用的代码/方法的关心程度。 @Joao Luiz Magalhaes 如果其他方法不起作用,您应该发布一个 sn-p 代码。

标签: javascript node.js mongodb mongoose promise


【解决方案1】:

在mongo连接之前使用这个代码,这将解决promise问题。

mongoose.Promise = global.Promise;

【讨论】:

    【解决方案2】:

    我通常连接到 MongoDB 的方式是使用 Bluebird promise 库。您可以在this post 中阅读有关它的更多信息。运气好的话,下面的这个 sn-p 将帮助您入门,因为它是我在原型设计时使用的。

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

    【讨论】:

    • 详细说明你将如何实现它并不是一个坏主意。
    【解决方案3】:

    最新的 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 设置了猫鼬使用的 Promise 而不是驱动程序。在这种情况下,您可以使用以下代码。

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

    【讨论】:

    • 谢谢 Tolsee,我前段时间就提出了这个问题,因为他们,我不必和 mongo 一起工作,下周我将开始一个关于 Mongo 的新课程,所以如果我遇到这个麻烦再次,我会检查你的答案。
    【解决方案4】:

    为我工作。

    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 */ });
    

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

    【讨论】:

      猜你喜欢
      • 2016-04-20
      • 2016-01-06
      • 2012-11-18
      • 2017-09-01
      • 1970-01-01
      • 2017-11-09
      • 1970-01-01
      • 2017-06-30
      相关资源
      最近更新 更多