猫鼬-为什么在设置猫鼬模块时设置“ mongoose.Promise = global.Promise”?

时间:2018-08-15 16:21:00

标签: javascript node.js mongoose

我正在和猫鼬一起工作。我已经看到很多开发人员执行以下命令:

mongoose.Promise = global.Promise;

那我很想知道mongoose.Promise的原始值是多少。我在编辑器中输入了以下命令:

const mongoose = require("mongoose");

console.log("promise: ", mongoose.Promise);

我的控制台返回了我:

  

promise:函数Promise(){[native code]}

好的,既然猫鼬的诺言已经返回了本机代码,为什么还要执行命令mongoose.Promise = global.Promise呢?我不明白要点,如果有人可以帮助我们理解,那就太好了,

谢谢

5 个答案:

答案 0 :(得分:19)

这是Mongoose 5不需要的旧示例中的遗留代码。

猫鼬4依靠自己的诺言实现mpromisemongoose.Promise不一定是全局的Promise

Mongoose 4 documentation所述:

  

猫鼬5.0将默认使用本机承诺(或蓝鸟,   如果没有本地承诺),但仍然   支持插入您自己的ES6兼容的promise库。猫鼬5.0   将不支持mpromise。

尽管有关Bluebird的陈述不再正确;猫鼬5放弃了对没有本地承诺的Node版本的支持。

mongoose.Promise = global.Promise;
如果在导入猫鼬之后为global.Promise分配了另一个实现(例如Bluebird),可能仍然需要

,尽管更好的办法是更早地分配global.Promise = Bluebird

答案 1 :(得分:9)

这里的猫鼬维护者。如果您使用的是Mongoose 5,请删除mongoose.Promise = global.Promise;。该行用于通过promises in Mongoose 4处理以下弃用警告:

WARNING: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead

它在Mongoose 5中什么也不做。如果要对your own promise library与Mongoose一起使用https://masteringjs.io/tutorials/mongoose/promise#the-mongoosepromise-property,例如Bluebird或Q,则只应在Mongoose 5中使用mongoose.Promise

这里还有mongoose.Promise的更多信息:@Joe Irby's answer

答案 2 :(得分:1)

如果我们想在代码内的不同位置使用猫鼬,则必须将其视为全局模式,这就是为什么我们需要将猫鼬设置为:

mongoose.Promise = global.Promise;

答案 3 :(得分:0)

我们只是在想连接到MongoDB数据库时使用过:

var mongoose = require('mongoose');

var mongoDB ='数据库URL';

mongoose.connect(mongoDB);

mongoose.Promise = global.Promise;

mongoose.connection.on('错误',console.error.bind(控制台,'MongoDB连接错误:'));

您需要创建架构并在

之后创建自己的模型

答案 4 :(得分:0)

首先,猫鼬将Promise用于异步应用程序。在新版本中,可以是:

mongoose.connect("URL").then("what you need to happen after the connection is done").catch("when the error happened")

因此,在编写猫鼬时,我使用了promise和global在任何地方使用猫鼬作为异步。