Nodejs中间件.pre不显示功能

时间:2016-09-27 12:37:28

标签: node.js mongodb mongoose

    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

2 个答案:

答案 0 :(得分:3)

尝试更改:

categoryList.pre('save', function (next) {
  // ...
})

为:

categoryList.schema.pre('save', function (next) {
  // ...
})

.pre()是Mongoose模式的一种方法,而不是模型。

答案 1 :(得分:0)

中间件(如pre挂钩)是架构的一部分。您似乎正在尝试在单个文档上使用它,而不是它的工作方式。

相反,请在用于创建Referral模型的架构上使用它:

ReferralSchema.pre('save', ...);

这确实意味着预挂钩将应用于该架构的所有文档。