Mongoose 的默认 Promise 库在 MEAN 堆栈中已弃用
Posted
技术标签:
【中文标题】Mongoose 的默认 Promise 库在 MEAN 堆栈中已弃用【英文标题】:Mongoose's default promise library is deprecated in MEAN stack 【发布时间】: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 代码。 【参考方案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
);
);
【讨论】:
以上是关于Mongoose 的默认 Promise 库在 MEAN 堆栈中已弃用的主要内容,如果未能解决你的问题,请参考以下文章