我有一个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 函数,希望了解如何抛出此错误。
我没有找到任何更改的文档。有什么想法吗?
编辑 我意识到我的问题是由于 Mongoose 的松散的 package.json 规范导致的,这导致我的主机(nodejitsu)使用了我认为是 4.x 版本而不是本地的 3.8.x 分支。如果我精确锁定版本,则不会发生问题。
typeof
检查,我看不出那段代码会抛出那个错误。你确定是那段代码引起了异常吗? - JohnnyHK