【问题标题】:Nodejs middleware .pre shows not a functionNodejs 中间件 .pre 显示不是函数
【发布时间】:2017-02-05 02:22:32
【问题描述】:
    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 不是函数 D:\Aventyn\ClipCare_v2\app\api.js:112:18 在 Layer.handle [as 处理请求] (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\layer.js:95:5) 接下来 (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\route.js:131:13) 在 Route.dispatch (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\route.js:112:3) 在 Layer.handle [as handle_request] (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\layer.js:95:5) 在 D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:277:22 在 Function.process_params (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:330:12) 接下来 (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:271:10) 在 Function.handle (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:176:3) 在路由器 (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:46:12) 在 Layer.handle [as handle_request] (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\layer.js:95:5) 在 trim_prefix (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:312:13) 在 D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:280:7 在 Function.process_params (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:330:12) 接下来 (D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:271:10) 在 D:\Aventyn\ClipCare_v2\node_modules\express\lib\router\index.js:618:15

【问题讨论】:

    标签: node.js mongodb mongoose


    【解决方案1】:

    中间件(如 pre 挂钩)是模式的一部分。看起来您正试图在单个文档上使用它,但它不是这样工作的。

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

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

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

    【讨论】:

    • 使用 mongoose 将数据从 AngularJS 发布到 mongodb 时,是否可以使用 .pre 来检查 mongodb 中的重复项?
    • @Vignesh 不可靠,不。您可能应该使用unique (sparse) indexes 来确保特定字段的唯一性。
    【解决方案2】:

    尝试改变:

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

    到:

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

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

    【讨论】:

    • 当我使用 categoryList.schema.pre('save', function (next) { // ... }) 它只是继续加载,并且在服务器控制台中没有显示任何错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-05-03
    • 2020-07-12
    • 2020-07-14
    • 2017-11-22
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多