2016-09-27 12 views
0
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!")); 
      } 
     }) 
    }) 

引用是我的變量分配給我的模式。 所屬分類是對象Nodejs中間件.pre顯示不是函數

這給出了一個錯誤

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

回答

2

嘗試改變:

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

到:

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

.pre()是貓鼬架構的方法,而不是一個模型。

+0

當我使用categoryList.schema.pre('save',函數(next){ // ... })它只是繼續加載,並沒有在服務器控制檯中顯示任何錯誤。 – Vignesh

0

中間件(如pre掛鉤)是架構的一部分。它看起來像你試圖在單個文檔上使用它,這不是它的工作原理。

相反,使用它,你用來創建Referral模型架構:

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

這是否意味着前鉤將被應用到該模式的所有文件。

+0

使用貓鼬將數據從AngularJS發佈到mongodb時,可以使用**。pre **來檢查mongodb中的重複項嗎? – Vignesh

+0

@Vignesh不可靠,沒有。您應該使用[unique(稀疏)索引](https://docs.mongodb.com/manual/core/index-unique/)來預防特定字段的唯一性。 – robertklep

+0

謝謝!獨特的索引減少了我的工作 – Vignesh