var categoryList = new Referral({categoryList : category});
categoryList.pre('save', function (next) {
Referral.find({categoryList : category}, function (err, docs) {
if (!docs.length){
next();
}else{
console.log('Data exists: ', category);
next(new Error("Data exists!"));
}
})
})
引荐是我分配给我的架构的变量。 categoryList是对象
这会产生错误
TypeError:categoryList.pre不是函数 D:\ Aventyn \ ClipCare_v2 \ app \ api.js:112:18在Layer.handle [as handle_request] (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ layer.js:95:5) 在下一个 (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ route.js:131:13) 在Route.dispatch (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ route.js:112:3) 在Layer.handle [as handle_request] (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ layer.js:95:5) 在 d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ index.js:277:22 在Function.process_params (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ index.js:330:12) 在下一个 (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ index.js:271:10) 在Function.handle (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ index.js:176:3) 在路由器 (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ index.js:46:12) 在Layer.handle [as handle_request] (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ layer.js:95:5) 在trim_prefix (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ index.js:312:13) 在 d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ index.js:280:7 在Function.process_params (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ index.js:330:12) 在下一个 (d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ index.js:271:10) 在 d:\ Aventyn \ ClipCare_v2 \ node_modules \表达\ lib中\路由器\ index.js:618:15
答案 0 :(得分:3)
尝试更改:
categoryList.pre('save', function (next) {
// ...
})
为:
categoryList.schema.pre('save', function (next) {
// ...
})
.pre()
是Mongoose模式的一种方法,而不是模型。
答案 1 :(得分:0)
中间件(如pre
挂钩)是架构的一部分。您似乎正在尝试在单个文档上使用它,而不是它的工作方式。
相反,请在用于创建Referral
模型的架构上使用它:
ReferralSchema.pre('save', ...);
这确实意味着预挂钩将应用于该架构的所有文档。