Mongoose: Предупреждение об устаревании

Созданный на 1 июл. 2016  ·  79Комментарии  ·  Источник: Automattic/mongoose

Я получаю это предупреждение

(node:3341) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html

после того, как я сделаю

driver.createCar({
          carName: 'jeep',
          availableSeats: 4,
        }, callback);

водитель является экземпляром класса Driver

const carSchema = new Schema({
  carName: String,
  availableSeats: Number,
  createdOn: { type: Date, default: Date.now },
});
const driverSchema = new Schema({
  email: String,
  name: String,
  city: String,
  phoneNumber: String,
  cars: [carSchema],
  userId: {
    type: Schema.Types.ObjectId,
    required: true,
  },
  createdOn: { type: Date, default: Date.now },
});
const DriverModel = mongoose.model('Driver', driverSchema);

class Driver extends DriverModel {
  getCurrentDate() {
    return moment().format();
  }
  create(cb) {
    // save driver
    this.createdOn = this.getCurrentDate();
    this.save(cb);
  }
  remove(cb) {
    super.remove({
      _id: this._id,
    }, cb);
  }
  createCar(carData, cb) {
    this.cars.push(carData);
    this.save(cb);
  }
  getCars() {
    return this.cars;
  }
}

любые мысли о том, что я делаю неправильно?

Самый полезный комментарий

Я решил это предупреждение, сделав

mongoose.Promise = global.Promise;

Прямо перед вызовом mongoose.connect

// connect to mongo function
core.connect = function connect(opts) {
  mongoose.Promise = global.Promise;
  mongoose.connect(`mongodb://${opts.server}:${opts.port}/${opts.db}`);
  return mongoose.connection;
};

Все 79 Комментарий

Хм, вы где-нибудь используете обещания? Вы не должны получать это предупреждение, если не используете промисы...

нет, я не использую промисы

Я только начал получать эту проблему слишком. Не использовать обещания, о которых я знаю!

Я решил это предупреждение, сделав

mongoose.Promise = global.Promise;

Прямо перед вызовом mongoose.connect

// connect to mongo function
core.connect = function connect(opts) {
  mongoose.Promise = global.Promise;
  mongoose.connect(`mongodb://${opts.server}:${opts.port}/${opts.db}`);
  return mongoose.connection;
};

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

Я получаю это, но я получаю это только тогда, когда я сохраняю объект, затем изменяю его в обратном вызове и снова сохраняю

Я пробовал подход @SAudelOG , чтобы назначить обещание мангусту перед подключением мангуста, но я все еще получаю эту ошибку

Я использую асинхронные функции es7, и мой код блокируется, когда я пытаюсь выполнить Model.findOne({})

Решение @SAudelOG работает. Как и @IrishAdo , я получаю это только при сохранении объекта. Возможно, это из-за одного из плагинов мангуста, который я использую с библиотекой обещаний Bluebird.

Вот список зависимостей, которые я использую

  "dependencies": {
    "async": "^2.0.0-rc.6",
    "body-parser": "^1.15.0",
    "bower": "^1.7.7",
    "compression": "^1.6.1",
    "connect-mongo": "^1.2.1",
    "consolidate": "^0.14.1",
    "cookie-parser": "^1.4.3",
    "express": "^4.13.4",
    "express-jwt": "^3.4.0",
    "express-session": "^1.13.0",
    "express-validator": "^2.20.8",
    "faker": "^3.1.0",
    "http-errors": "^1.5.0",
    "jsonwebtoken": "^7.0.1",
    "lodash": "^4.13.1",
    "method-override": "^2.3.5",
    "mongoose": "^4.4.3",
    "mongoose-beautiful-unique-validation": "^3.0.0",
    "mongoose-delete": "^0.3.3",
    "mongoose-validator": "^1.2.5",
    "morgan": "^1.6.1",
    "passport": "^0.3.2",
    "passport-local": "^1.0.0",
    "swig": "^1.4.2"
  }

Я не использую ни плагины, ни промисы, а также получаю это предупреждение (на [email protected]).

Запустив мое приложение с помощью "--trace-deprecation", я получил:

Trace: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead:
http://mongoosejs.com/docs/promises.html
    at Object.exports._printDeprecationMessage (internal/util.js:30:13)
    at Promise.deprecated [as then] (internal/util.js:54:22)
    at fnWrapper (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:188:11)
    at EmbeddedDocument.Object.defineProperty.value.fn (.\node_modules\mongoose\lib\schema.js:219:11)
    at _next (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:62:30)
    at fnWrapper (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:186:18)
    at EmbeddedDocument.Object.defineProperty.value.fn (.\node_modules\mongoose\lib\schema.js:173:18)
    at EmbeddedDocument._next (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:62:30)
    at EmbeddedDocument.proto.(anonymous function) [as $__original_save] (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:108:20)
    at .\node_modules\mongoose\lib\document.js:1917:24
    at new Promise.ES6 (.\node_modules\mongoose\lib\promise.js:45:3)
    at EmbeddedDocument.wrappedPointCut [as save] (.\node_modules\mongoose\lib\document.js:1893:14)
    at async.each.i (.\node_modules\mongoose\lib\schema.js:225:18)
    at .\node_modules\async\lib\async.js:181:20
    at Object.async.forEachOf.async.eachOf (.\node_modules\async\lib\async.js:233:13)
    at Object.async.forEach.async.each (.\node_modules\async\lib\async.js:209:22)
    at model.Object.defineProperty.value.fn (.\node_modules\mongoose\lib\schema.js:223:15)
    at _next (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:62:30)
    at fnWrapper (.\node_modules\mongoose\node_modules\hooks-fixed\hooks.js:186:18)
    at .\node_modules\mongoose\lib\schema.js:200:17
    at .\node_modules\mongoose\node_modules\kareem\index.js:127:16
    at nextTickCallbackWith0Args (node.js:420:9)
    at process._tickDomainCallback (node.js:390:13)

У меня та же проблема, если это поможет, она специально запускается, когда я пытаюсь создать документы, внутри которых есть массив вложенных документов, например:

var data = {
  field: 'value',
  another_field: [{subdocfield1: 'value', subdocfield2: 'value'}]
} 

mySchema.create(data, cb)

Это не происходит с другими коллекциями, у которых нет вложенных документов, этого даже не происходит, если я выдаю оператор создания без данных вложенных документов, например:

var data = {
  field: 'value'
} 

mySchema.create(data, cb)

_Примечание:_ mongoose.Promise = global.Promise действительно решило проблему с предупреждением для меня

Такое же предупреждение об обесценивании возникает, когда я использую remove() в документе. Я не использую обещания здесь или где-либо еще в моем коде.

Я только что получил эту ошибку при использовании Model.create(objects, callback); , возможно, это исправление еще не было опубликовано в npm?

Получение этого, рад читать, это не настораживает. Я буду внимательно изучать это, чтобы помочь в отладке, когда это произойдет.

Получаю это, и я нигде не использую обещания мангуста.

Я смог отследить его до вызова model.save внутри обратного вызова библиотеки on-headers , и модель была создана вне обратного вызова, до того, как он был вызван, на случай, если это кому-нибудь поможет. Включение вызова создания модели и сохранения в обратный вызов не имеет значения.

Столкнувшись с этой проблемой на узле v4.4.6, тогда как на v4.4.2 это, похоже, работает

Пример кода @SKatiyar , пожалуйста

то же самое и со мной, получив это сообщение после вызова метода save(), мне достаточно, чтобы позаботиться

Это работает! Перед mongoose.connect(MONGO_URI); добавьте mongoose.Promise = global.Promise;

Для воспроизведения с моей стороны достаточно следующего кода:

const mongoose = require('mongoose');
const schema = new mongoose.Schema({
  data: { type: Number }
});
const Model = mongoose.model('schema', schema);
mongoose.connect('mongodb://127.0.0.1:27017/somedatabase');
const newModel = new Model({ data: 1 });
const save = newModel.save(() => {
  console.log('saved model');
});
console.log(typeof save.then); //=> 'function'

Странная вещь, которую я вижу здесь, заключается в том, что использование newModel.save(callback) по-прежнему возвращает обещание (или я предполагаю, что это обещание, поскольку тип .then равен 'function' ). Это ожидаемое поведение?

Вот мои версии:
Узел: v6.3.1
Мангуст: v4.5.8

Дайте мне знать, если вам нужна какая-либо другая информация от меня.

@dvlsg да, это ожидаемое поведение в настоящее время, сохранение всегда будет возвращать обещание, даже если вы передадите обратный вызов

Что ж, я думаю, это, по крайней мере, объясняет, почему люди видят предупреждение о промисе, даже если они не думают, что используют промисы.

Это все объясняет .. Я просто немного параноик и хотел избавиться от всех предупреждений 💃

Это моя вина, да, .save() возвращает обещание, так что это ожидаемо, но тем не менее предупреждение заставило меня задуматься. http://mongoosejs.com/docs/promises.html (просто нужно было прочитать первый абзац 🎱)

Итак, .save() возвращает обещание, но вы не должны получать это предупреждение, пока не вызовете .then() . Если вы получаете это предупреждение без вызова .then() в своем коде, это означает, что мангуст использует промис где-то там, где он не должен, поэтому откройте отдельную проблему с примерами кода: +1:

ИМХО, это сообщение должно быть ошибкой («что-то не работает»), а не предупреждением («обратите внимание, но это должно работать»), поскольку оно фактически возвращается как ошибка в обратном вызове.

Я столкнулся с этой проблемой, и метод aModel.save() не работал для помещения в MongoDB. Потребовалось некоторое время, чтобы найти причину этой проблемы. После применения «mongoose.Promise = global.Promise;» это удалось.

Я использовал «мангуст»: «^ 4.5.9».

Сохранение должно нормально работать с обещанной библиотекой по умолчанию, можете ли вы предоставить пример кода?

@vkarpov15

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

Я не уверен, связано ли это с другим кодом в моем проекте. нужно время для проверки. Пожалуйста, игнорируйте, пока я не выясню причину.

Для меня этот журнал появляется в консоли всякий раз, когда я использую .then(), не имеет значения, используется ли он с объектом мангуста или любым другим объектом, не связанным с мангустом

Итак, согласно документам , я прохожу

'use strict';
var Promise = require('bluebird');

// Development specific configuration
// ==================================
module.exports = {
  // MongoDB connection options
  mongo: {
    uri: 'mongodb://localhost/fullstack-dev',
    options: {
      promiseLibrary: Promise
    }
  },
  // .. other config
};

Затем в моем основном файле делаю

'use strict';

// Set default node environment to development
process.env.NODE_ENV = process.env.NODE_ENV || 'development';
process.env.BLUEBIRD_DEBUG = 1;
var mongoose = require('mongoose');
var config = require(path.join(__dirname, 'server', 'config', 'environment'));

// Connect to database
var db = mongoose.connect(config.mongo.uri, config.mongo.options);
mongoose.connection.on('error', function(err) {
  console.error('MongoDB connection error: ' + err);
  process.exit(-1);
});

И я все еще получаю предупреждение об устаревании при выполнении query.exec . Любые предложения о том, что я делаю неправильно?
[Редактировать: добавление версий мангуста и синей птицы]
Я использую мангуста ^4.6.1 , синюю птицу ^3.4.6

Я также получаю предупреждение о мангусте 4.6.1 и узле 4.4.5.

    var mongoose = require('mongoose');
    mongoose.Promise = global.Promise;
    mongoose.connect(dbConfig);
    var connection = mongoose.connection;

@manu29d похоже, вы не устанавливаете mongoose.Promise = bluebird

@vkarpov15 Думаю, да. Я объявил var Promise = в начале скрипта конфигурации, а затем promiseLibrary: Promise . (Посмотрите на первый фрагмент кода в примерах)

Кроме того, я попытался написать promiseLibrary: require('bluebird') , как указано в документах.

Я не вижу mongoose.Promise = require('bluebird') в приведенном вами примере кода. var Promise = require('bluebird'); _не_ правильно.

@vkarpov15 Я имею в виду http://mongoosejs.com/docs/promises.html#promises -for-the-mongodb-driver

Это все еще в силе? У меня нет времени проверять код, поддерживается ли эта опция ( promiseLibrary ) в конфигурации или она была удалена.

Однако установка mongoose.Promise = global.Promise работает.

mongoose.Promise = global.Promise
до того, как mongoose.connect у меня тоже сработает.

Я не использую промисы и не вызываю mongoose.Promise = global.Promise перед подключением.

@manu29d manu29d , эти документы верны, однако, если вы действительно их прочитаете, вы увидите, что параметр promiseLibrary влияет только на базовый драйвер mongodb, а не на модели mongoose.

@zubair-farooqui-10p приведенный ниже сценарий не вызывает у меня предупреждение в 4.5.9 или 4.6.3:

'use strict';

Error.stackTraceLimit = Infinity;

var assert = require('assert');
var mongoose = require('mongoose');
var Schema = mongoose.Schema;

mongoose.connect('mongodb://localhost/gh4291');
mongoose.set('debug', true);

var connection = mongoose.connection;

Это действительно раздражает, что вам нужно добавить эту дополнительную строку, есть ли способ для мангуста исправить это в своей внутренней библиотеке? Спасибо!

В общем, нет, потому что механизм переключения обещаний lib мангуста сильно отличается от того, как работает драйвер mongodb. В mongoose это просто свойство, которое вы можете установить для глобального объекта mongoose в любое время, тогда как в драйвере mongodb это параметр подключения, поэтому разные соединения могут иметь разные библиотеки обещаний, но вы можете установить библиотеку обещаний только при подключении, не потом. Примирение этих различий на самом деле не является приоритетом.

Почему это происходит при сохранении документа с массивом строк, может ли кто-нибудь уточнить

Я также получаю это после того, как просто позвонил .createConnecton() . Самое смешное, что я использую Q... НО! Но я предпочитаю делать это после установления соединения, потому что я (и я почти уверен, что все) предпочитают делать это в блоке объявления var. то есть

var mongoose = require('mongoose'),
        connection1 = mongoose.createConnection(dbConn1Str),
        connection2 = mongoose.createConnection(dbConn2Str)
;
mongoose.Promise = Q.makePromise;

Вместо этого, чтобы избавиться от этого предупреждения, я вынужден сделать:

var mongoose = require('mongoose'),
        connection1, connection2
;
mongoose.Promise = Q.makePromise;
connection1 = mongoose.createConnection(dbConn1Str)
connection2 = mongoose.createConnection(dbConn2Str)

Ничего страшного, но srssly ...

Да, это путь. Mongoose 4.x будет использовать mpromise до тех пор, пока вы не запретите это делать.

Я вижу это при использовании обычного вызова find() с помощником запросов. Я нигде не использую then .

BookStore.find().byUsingQueryHelper(1,2,3).lean().exec(function (err, docs) { ... })

Бревно:

Mongoose: bookstores.find({ location: { '$near': [28.742712943610545, -13.865369983731426], '$maxDistance': 0.0012556898446083817 } }, { limit: 10, fields: undefined })

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

@pronebird , к сожалению, именно так exec() работает внутри, обратные вызовы к exec() фактически проходят через обещание. Просто сделайте mongoose.Promise = global.Promise , и вы больше не должны получать это предупреждение.

@pronebird Я получил ту же ошибку при публикации, и я обнаружил, что моя схема имеет значение по умолчанию, как показано ниже, и не соответствует моему опубликованному значению ниже
роль: {
тип: Строка,
перечисление: ['Клиент', 'Администратор'],
по умолчанию: "Клиент"
}
Я публикую роль: admin , и это должно быть Admin
надеюсь, что этот ответ поможет кому-то. Благодарность

@Muhammedalbayati Я не думаю, что ваша проблема имеет какое-то отношение к этой конкретной проблеме? Это просто предупреждение, сделанное Mongoose относительно обещаний.

@varunjayaraman вы правы, я должен упомянуть следующее
предупреждение
Предупреждение об устаревании: Mongoose: mpromise (библиотека обещаний мангуста по умолчанию) устарела, вместо этого подключите свою собственную библиотеку обещаний: http://mongoosejs.com/docs/promises.html

уходит, добавляя mongoose.Promise = global.Promise; перед подключением к БД
mongoose.connect('mongodb://localhost:27017/mydb');

@Muhammedalbayati Я думаю, что @vkarpov15 объяснил, почему появляется это предупреждение. Mongoose использует обещания внутри exec .

ES6 «yiled» просто не работает с методом doc.save после того, как я обновил mongoose до версии 4.7.7.
Наконец, это просто потому, что mongoose.Promise = global.Promise . После того, как я удалю это, он все еще предупреждает

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

Я думаю, у [email protected] есть собственный модуль обещаний. Это правильно??
Кто-нибудь это знает?

Это мангуст добавляет es6-promise lib.

Такой глупый вопрос!

PS: Засунь себе в пизду этот варнинг ебучий!

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

@ vkarpov15 Я пробовал и mongoose.Promise = global.Promise; , и mongoose.Promise = require('bluebird'); .

К сожалению, я все еще получаю предупреждение об устаревании.

_Я что-то делаю не так?_

const mongoose = require('mongoose');

mongoose.Promise = global.Promise;

mongoose.connect('mongodb://localhost/users_test');

mongoose.connection
  .once('open', () => {
    console.log('connectecd to db')
  })
  .on('error', (err) => {
    console.warn('Warning', err)
  });

@protoEvangelium Вы импортируете мангуста в другое место в своем приложении? Мангуст используется впервые или этот файл импортирован в другой файл?

Также какую версию mongoose/node вы используете?

@varunjayaraman Этот файл больше нигде не импортируется. Однако я импортирую мангуста в свой файл схемы user.js, а затем использую эту схему пользователя в некоторых своих тестах.

const mongoose = require('mongoose')
const Schema = mongoose.Schema
const UserSchema = new Schema({
  name: String,
})
const User = mongoose.model('user', UserSchema)
module.exports = User

узел v7.0.0мангуст v4.8.1

@protoEvangelium вы получаете предупреждение в своем приложении или только в тестах?

Однажды у меня была такая же проблема - виновником был другой модуль, который использовал свою собственную зависимость от мангуста. У таких модулей есть что-то вроде "mongoose": "^4.1.1" в их package.json, но, поскольку эти модули обновляются ежегодно (если вообще обновляются), им не хватает части конфигурации обещания. @protoEvangelium , вы используете какие-либо другие модули?

@SAudelOG Спасибо за ответ

@varunjayaraman Я только начал тестировать добавление пользователей в Mongo с помощью Mongoose и Mocha. Пока это голый проект.

@Spown Я использую:
"mocha": "^3.2.0", "mongoose": "^4.8.1", "nodemon": "^1.11.0"

Спасибо :)

@protoEvangelium , подождите, вы пробовали это?

const mongoose = require('mongoose')
mongoose.Promise = global.Promise // <--
const Schema = mongoose.Schema
const UserSchema = new Schema({
  name: String,
})
const User = mongoose.model('user', UserSchema)
module.exports = User

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

@Спаун

Я наткнулся на эту ветку в нужное время. Я получал такое же предупреждение каждый раз, когда сохранял информацию. Оказывается, я создавал модель из экземпляра мангуста и не переопределял ее. Требование bluebird и настройка его на mongoose.Promise разрешили сообщение об ошибке.

Большое спасибо!

@Spown Спасибо, сэр! В этом была проблема. Интересно, что я определил mongoose.Promise = global.Promise; в своем файле test_helper.js прямо перед подключением к Mongoose. Я переключил mongoose.Promise = global.Promise; на свой файл, где я определил схему, и она работает!!!! Больше никаких предупреждений об устаревании 👍

const mongoose = require('mongoose')
mongoose.Promise = global.Promise;
const Schema = mongoose.Schema

Я получаю эту проблему при использовании «заселяемых» виртуальных машин в моих схемах. Запустив мое приложение с --trace-deprecations , вы можете увидеть виновника:

(node:8846) DeprecationWarning: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead: http://mongoosejs.com/docs/promises.html
    at model.wrappedPointCut [as init] (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mongoose/lib/services/model/applyHooks.js:141:26)
    at completeMany (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mongoose/lib/query.js:1254:12)
    at Immediate.cb (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mongoose/lib/query.js:1117:13)
    at Immediate.<anonymous> (/Users/fleavamini/Projects/stellium/stellium-express/node_modules/mquery/lib/utils.js:137:16)
    at runCallback (timers.js:651:20)
    at tryOnImmediate (timers.js:624:5)
    at processImmediate [as _immediateCallback] (timers.js:596:5)

Я установил обещание (обратите внимание, что я использую TypeScript):

import * as mongoose from "mongoose";
(<any>mongoose).Promise = global.Promise;
mongoose.connect('mongodb://localhost/blah')

Любые идеи? Должен ли я устанавливать обещание для каждой модели, использующей «заселяемые» виртуальные машины? Подождите, я на самом деле собираюсь попробовать и отпишусь, как все прошло.

Ладно, немного повозившись, я понял, что мне все равно нужно установить Promise в моей схеме, даже если я установил его в index своего сервера.

В моем случае коллекция website_pages была первой коллекцией, которая когда-либо запрашивалась моей системой, установка для mongoose.Promise значения global.Promise только в этой схеме устранила проблему, и я не не требуется устанавливать его во всех схемах.

Почему бы не использовать промисы ES6? Разве они сейчас не везде доступны?

mongoose.Promise = Promise; // eh?

Спасибо @Spown , я столкнулся с таким же предупреждением об устаревании, так как я поставил mongoose.Promise = global.Promise после импорта модели. Теперь предупреждение об устаревании исчезло.

Объявление mongoose.Promise = global.Promise в файле модели, как указано @Spown , работает. Это связано с кешированием узлом необходимых модулей . Хотя это кажется непостоянным. Нет ли способа убедиться, что сначала загружается test_helpers.js , чтобы я мог установить функцию обещания мангуста в этом файле?

Нет ли способа гарантировать, что...

лично я require mongoose только один раз в своих проектах, затем помещаю его в глобальный объект Singleton и использую везде для всех целей БД. Не совсем изящный, но в основном пуленепробиваемый. и я делал это задолго до устаревания просто потому, что если вы используете пользовательское соединение, которое я делаю (соединение, сделанное через mongoose.createConnection() вместо mongoose.connect() ) - вам нужно создавать модели из экземпляра мангуста, связанного с этим соединением. В противном случае он просто не будет работать вообще, что намного хуже, чем какое-то надоедливое предупреждение.

да, я делаю то же самое, что и @Spown. Это, конечно, не идеально, но это единственный способ сохранить обратную совместимость с mongoose до следующего крупного релиза, когда мы сможем полностью отказаться от mpromise.

библиотеки/mongoose.js

import mongoose from 'mongoose'; // real mongoose only be required once here 

mongoose.Promise = global.Promise; // so that you dont have to do this on every require
const Schema = mongoose.Schema;

export {
  mongoose as default, // kind of singleton
  mongoose,
  Schema,
};

index.js

import mongoose from './libs/mongoose';
mongoose.connect(process.env.MONGODB_URI);

модели /user.js

import {mongoose, Schema} from '../libs/mongoose';

export default mongoose.model('User', new Schema({
  name: String,
  password: String,
}));

Вызовы @howard require() кэшируются.

Итак, если я правильно понимаю, мне нужно установить обещание перед каждым объявлением схемы, а не делать это только в одном месте (например, в моем индексном файле или там, где я устанавливаю соединение)
Это не очень хорошая практика, стоит подумать о том, чтобы изменить ее на функцию, например:
mongoose.setPromise(global.Promise);

@sh-guti Я так думаю, у меня была та же проблема, и этот фрагмент кода решил ее.

На данный момент я не знаю, использовать ли обратные вызовы или обещания. РЖУ НЕ МОГУ.

Использовать

mongoose.createConnection(URI)

Кто-нибудь может объяснить, с какой стати мангуст отрицает существование нативных промисов и не может их использовать "из коробки"?

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

Когда это будет?

mongoose.createConnection(URI) вызывает очень странную ошибку с Mongoose, часы отладки с неработающими запросами. в конце концов вернулся к

mongoose.connect (процесс.env.MONGODB); из mongoose.createConnection(process.env.MONGODB)

в качестве примечания, это остановило предупреждение об обесценивании ... но остановило все, что работает ...

@MickL у нас будет rc0 в ближайшие несколько недель, подписывайтесь на mongoose в твиттере или присоединяйтесь к слабому каналу для получения обновлений

Была ли эта страница полезной?
0 / 5 - 0 рейтинги