【发布时间】:2015-07-10 22:25:36
【问题描述】:
我有一个 Mongoose 模型,我在其中调用了钩子中的 toObject 方法:
Product.post('init', function() {
// if (typeof this.toObject === 'function') - works but why do I need it?
this._original = this.toObject();
});
这在过去运行良好,但在 Mongoose 升级后抛出此错误:
TypeError: Object #<EventEmitter> has no method 'toObject'
at EventEmitter.Product.pre.self (/opt/run/snapshot/package/models/product.js:426:25)
at EventEmitter.emit (events.js:95:17)
at model.Document.(anonymous function) [as emit] (/opt/run/snapshot/package/node_modules/mongoose/lib/document.js:88:42)
at model.Document.init (/opt/run/snapshot/package/node_modules/mongoose/lib/document.js:271:8)
at completeMany (/opt/run/snapshot/package/node_modules/mongoose/lib/query.js:1075:12)
at Object.cb (/opt/run/snapshot/package/node_modules/mongoose/lib/query.js:1030:11)
at Object._onImmediate (/opt/run/snapshot/package/node_modules/mongoose/node_modules/mquery/lib/utils.js:137:16)
at processImmediate [as _immediateCallback] (timers.js:345:15)
我应该注意到,这发生在启动应用程序时。我可以进行检查以防止错误,但问题是我需要 toObject 函数并且想了解如何引发此错误。
我没有找到有关任何更改的文档。有什么想法吗?
编辑我意识到我的问题是由松散的 package.json Mongoose 规范引起的,这导致我的主机 (nodejitsu) 使用我认为是 4.x 的版本而不是我的本地 @987654327 @ 分支。如果我完全锁定版本,则不会出现问题。
【问题讨论】:
-
您能告诉我们您是如何定义 Post 架构的,包括为其模型定义的任何实例和静态方法吗?
-
鉴于您的
typeof检查,我看不出该代码有任何方法抛出该错误。你确定这是引发异常的代码吗? -
@JohnnyHK - 很抱歉 - 这是我为防止错误而添加的检查 - 已编辑帖子。如果我进行 typeof 检查,则没有错误,但我需要的功能不起作用。
-
好吧,这与使用 Mongoose 4+ 的柔术有关。一位用户发布了答案,但随后将其删除。 Mongoose 4 钩不同。锁定版本就行了——我有旧风格^。
-
我删除了我的答案,因为我意识到
_original值没有持续到后面的钩子中。我将我的代码附加到 Github 上的一个未解决问题中。 github.com/Automattic/mongoose/issues/2363