Плагин Mongoose не работает при использовании в сочетании с Feathersjs - PullRequest
0 голосов
/ 27 декабря 2018

У меня очень раздражающая проблема с плагином Mongoose в сочетании с Feathers.

Это простой плагин, взятый из документации Mongoose здесь , который обновляет версию документа (__v) для каждого типа обновления.Он отлично работает как отдельный плагин, но в сочетании с Feathersjs он не работает.

Каким-то образом Mongoose неправильно преобразовывает строки идентификаторов объектов в ObjectID при запуске обновлений и исправлений с помощью плагина в сочетании с Feathersjs.Если я отключаю плагин, обновления и патчи работают.

Насколько я смог определить отладку, данные, отправляемые при вызове из Feathersjs в Mongoose, одинаковы как с включенным, так и с отключенным плагином.Поэтому я склонен сказать, что Feathersjs не является виновником, но опять же, почему плагин работает без Feathersjs?

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

  • src / models / schema / Categories.schema.js - пример определения схемы Mongoose
  • src / mongoose / always-update-version-key.js - плагин
  • test / mongoose / always-update-version-key.test.js - тестирование схемы и плагина без перьев
  • test / services / category.test.js - тестированиесхема и плагин с Feathers

Я добавил тест для тестирования плагина с и без Feathersjs.Для запуска тестов выполните npm run test:unit.Mongo должен работать на порте по умолчанию (27017).

Я надеюсь, что кто-то может помочь мне решить эту очень неприятную проблему или указать мне код в Mongoose, где строки идентификаторов преобразуются в ObjectID.

1 Ответ

0 голосов
/ 28 декабря 2018

Значение по умолчанию feathers-mongoose - это опция lean , установленная на true для более быстрых запросов.Когда нужно использовать модельные плагины (что, я думаю, должно быть здесь), установите lean: false в параметрах сервиса :

  const options = {
    Model,
    paginate,
    lean: false
  };

  // Initialize our service with any options it requires
  app.use('/category', createService(options));
...