Mongoose - Why we make "mongoose.Promise = global.Promise" when setting a mongoose module?

Javascriptnode.jsMongoose

Javascript Problem Overview


I'm working with Mongoose. I have seen a lot of developers make the following command:

mongoose.Promise = global.Promise;

Then I was curious to see what is the original value of mongoose.Promise . I have entered in my editor the following command:

const mongoose = require("mongoose");

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

My console returned me :

> promise: function Promise() { [native code] }

Okay, so why make the command mongoose.Promise = global.Promise since the Mongoose's promise already returns a native code ? I don't understand the point, if someone can help us to understand, would be great,

Thanks

Javascript Solutions


Solution 1 - Javascript

This is legacy code from older examples that isn't needed with Mongoose 5.

Mongoose 4 relied on its own promise implementation, mpromise. mongoose.Promise wasn't necessarily Promise global.

As Mongoose 4 documentation states:

> Mongoose 5.0 will use native promises by default (or bluebird, if native promises are not present) but still support plugging in your own ES6-compatible promises library. Mongoose 5.0 will not support mpromise.

Though the statement about Bluebird is no longer true; Mongoose 5 dropped the support of Node versions that don't have native promises.

mongoose.Promise = global.Promise;

may still be needed if global.Promise was assigned with another implementation (e.g. Bluebird) after Mongoose was imported, though a better thing would be to assign global.Promise = Bluebird earlier instead.

Solution 2 - Javascript

Mongoose maintainer here. If you're using Mongoose 5, please remove mongoose.Promise = global.Promise;. That line was used to address the below deprecation warning with promises in Mongoose 4:

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

It does nothing in Mongoose 5. You should only use mongoose.Promise in Mongoose 5 if you want to use your own promise library with Mongoose, like Bluebird or Q.

There's also a little more about mongoose.Promise here: https://masteringjs.io/tutorials/mongoose/promise#the-mongoosepromise-property

Solution 3 - Javascript

If we want to use mongoose in different position inside the codes it must be viewed as global mode, that's why we need to set mongoose as :

mongoose.Promise = global.Promise;

Solution 4 - Javascript

we used just in the point when we want to get connected in to MongoDB database :

var mongoose = require('mongoose');

var mongoDB = ' database url ';

mongoose.connect(mongoDB);

mongoose.Promise = global.Promise;

mongoose.connection.on('error',console.error.bind(console, 'MongoDB connection error:'));

you need to create schema and do your own model after

Solution 5 - Javascript

First, mongoose uses Promise for Async applications. In new versions it can be:

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

Therefore, I used promise and global to use mongoose anywhere as Async when writing mongoose.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionWebwomanView Question on Stackoverflow
Solution 1 - JavascriptEstus FlaskView Answer on Stackoverflow
Solution 2 - Javascriptvkarpov15View Answer on Stackoverflow
Solution 3 - JavascriptAzkri SaidView Answer on Stackoverflow
Solution 4 - JavascriptAzkri SaidView Answer on Stackoverflow
Solution 5 - JavascriptMohammed Al-ReaiView Answer on Stackoverflow