2017-02-22 2 views
0

Почему я продолжаю получать это сообщение об ошибке при попытке запустить node file.js в моем терминале? Я попробовал добавить «mongoose.Promise = global.Promise» перед «mongoose.connect ...», но он все равно не работает.Ошибка «Mongoose mpromise устарела»

DeprecationWarning: Mongoose: mpromise (обещание по умолчанию библиотека Mongoose в) является устаревшим, подключи в собственном посыла библиотеке вместо: http://mongoosejs.com/docs/promises.html

Вот исходный код:

var Product = require('../models/product'); 

var mongoose = require('mongoose'); 

mongoose.Promise = global.Promise; 

mongoose.connect('localhost:27017/shopping'); 

var products = [ 
    new Product({ 
     imagePath: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png', 
     title: 'Gothic 5 Video Game', 
     description: 'Awesome Game!!!!', 
     price: 10 
    }), 
    new Product({ 
     imagePath: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png', 
     title: 'Gothic 4 Video Game', 
     description: 'Also Awesome Game!!!!', 
     price: 20 
    }), 
    new Product({ 
     imagePath: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png', 
     title: 'Gothic 3 Video Game', 
     description: 'best game ever!!!!', 
     price: 15 
    }), 
    new Product({ 
     imagePath: 'https://upload.wikimedia.org/wikipedia/en/5/5e/Gothiccover.png', 
     title: 'Gothic 2 Video Game', 
     description: 'top notch!!!', 
     price: 50 
    }) 
]; 

var done = 0; 
for (var i = 0; i < products.length; i++) { 
    products[i].save(function(err, result){ 
     done++; 
     if (done === products.length) { 
      exit(); 
     } 
    }); 
} 

function exit() { 
    mongoose.disconnect(); 
} 
+0

Это не ошибка, это предупреждение. –

+0

Кажется, это дубликат: http://stackoverflow.com/questions/38138445/node3341-deprecationwarning-mongoose-mpromise –

ответ

0

У меня был тот же проблема. Чтобы избавиться от предупреждения, вы должны добавить «mongoose.Promise = global.Promise» в каждый файл, в котором вы нуждались в мангусте.

1

Ошибка говорит о том, что библиотека обещаний Mongoose устарела, вместо этого подключите свою собственную библиотеку обещаний.

По умолчанию, когда вы используете Mongoose, у него есть библиотека обещаний по умолчанию, подключенная к ней. Он использует mpromise, который поставляется с Mongoose.

Итак, у него есть реализация библиотеки обещаний по умолчанию, но по какой-то причине они больше не хотят, чтобы вы ее использовали.

Вместо этого у вас есть несколько вариантов использования вашей собственной библиотеки обещаний. Наиболее популярными в сообществе Nodejs являются Bluebird, Q или ES6 Promises.

Я рекомендую вам пойти с ES6 Promises, потому что он будет абсолютно выполнять все, что вам нужно для обещаний, выходящих из Mongoose.

Если это кажется немного произвольным, например, почему Mongoose просто не понимает это для нас. Mongoose делает это, чтобы дать нам большую гибкость в отношении того, какую обещание мы хотим использовать, что для некоторых пользователей, действительно важно. Для некоторых проектов это то, о чем вас беспокоит, но, когда вы впервые начинаете с этого, вы не очень беспокоитесь об этом.

Таким образом, все, что вам нужно сделать, это исправить внутреннюю библиотеку обещание Mongoose в:

В самом начале файла, где у вас есть это:

const mongoose = require('mongoose'); 

Под его вы собираетесь писать :

mongoose.Promise = global.Promise; 

Итак, на левой стороне мы говорим, эй Mongoose всякий раз, когда вы хотите создать обещание для любого вида взаимодействия с базой данных ВАЗы Мы хотим, чтобы вы использовали эту реализацию библиотеки обещаний.

global.Promise является ссылкой на реализацию обещаний ES6 в среде Nodejs.

Итак, мы говорим с этим кодом, когда вам нужно реализовать обещание, просто используйте реализацию ES6.

Смежные вопросы