当与Feathers.js结合使用时,Mongoose插件不起作用

时间:2018-12-27 20:33:59

标签: mongodb mongoose feathersjs

Mongoose插件与Feathers结合使用时,我遇到了一个非常烦人的问题。

这是一个从Mongoose文档here中提取的简单插件,该插件会在每种更新类型上更新文档版本(__v)。它可以作为独立插件正常运行,但是与Feathersjs结合使用时会失败。

当与Feathersjs结合使用插件运行更新和补丁时,Mongoose不能以某种方式将对象ID字符串正确转换为ObjectID。如果我禁用了插件更新和补丁,则可以正常工作。

据我所能确定的调试信息,无论启用还是禁用该插件,从Feathersjs到Mongoose的调用中发送的数据都是相同的。因此,我倾向于说Feathersjs并非罪魁祸首,但又为什么在没有Feathersjs的情况下插件才能正常工作?

我已经设置了示例存储库here。不幸的是,这是重新创建问题所需的最低设置。概要如下:

  • src / models / schema / categories.schema.js-示例猫鼬模式 定义
  • 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中将ID字符串转换为ObjectID的代码。

1 个答案:

答案 0 :(得分:0)

feathers-mongoose的默认设置是lean option设置为true,以提高查询速度。当应该使用模型插件时(我认为应该是这种情况),请在service options中设置lean: false

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

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