node.js - Nodejs中间件.pre显示不是一个函数

标签 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!"));
            }
        })
    })

Referral 是分配给我的架构的变量。 categoryList 是对象

这会产生错误

TypeError: categoryList.pre is not a function at D:\Aventyn\ClipCare_v2\app\api.js:112:18 at Layer.handle [as handle_request] (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\layer.js:95:5) at next (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\route.js:131:13) at Route.dispatch (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\route.js:112:3) at Layer.handle [as handle_request] (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\layer.js:95:5) at D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:277:22 at Function.process_params (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:330:12) at next (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:271:10) at Function.handle (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:176:3) at router (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:46:12) at Layer.handle [as handle_request] (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\layer.js:95:5) at trim_prefix (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:312:13) at D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:280:7 at Function.process_params (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:330:12) at next (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:271:10) at D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:618:15

最佳答案

尝试改变:

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

至:

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

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

关于node.js - Nodejs中间件.pre显示不是一个函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39724891/

相关文章:

angularjs - 我可以在不使用 Node.js 的情况下使用 Ionic 来构建托管 Web 应用程序吗?

regex - 尽管 : elif: else,但使用正则表达式的 PyMongo 查询不返回任何内容

mongodb - 如何为博客设计 MongoDB?

node.js - Mongoose ODM - 验证失败

javascript - 有没有更优雅的 "fake"类继承方式?

javascript - Mongoose 在对象数组中查找值

mysql - 尝试在 Node js 中运行简单程序时出错

javascript - node.js process.stdout.write 类型错误

node.js - 如何使用 Busboy 访问 Express 4 req.body 对象

c# - 使用 C# MongoDB 将 Int 转换为 String?