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

Referralは自分のスキーマに割り当てられた変数です。Nodejミドルウェア.preは関数ではありません

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

に:

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

.pre()は、マングーススキーマの方法ではない 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

答えて

2

を与える

オブジェクトでありますモデル。

+0

categoryList.schema.pre( 'save'、function(next){ // ... })を使用すると、ロードが継続され、サーバーコンソールにエラーは表示されません。 – Vignesh

0

ミドルウェア(preフックなど)はスキーマの一部です。あなたが1つのドキュメント上でそれを使用しようとしているように見えますが、それはどのように動作するのでしょうか。代わりに

、あなたがReferralモデルの作成に使用されるスキーマにそれを使用する:

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

これは前フックは、そのスキーマのすべての文書に適用されることを意味しています。

+0

AngongJSからmongooseを使用してmongodbにデータを投稿する際に、** ** pre **を使用してmongodbの重複をチェックできますか? – Vignesh

+0

@Vignesh not reliable、no。特定のフィールドを一意にするためには、おそらく[unique(sparse)indexes](https://docs.mongodb.com/manual/core/index-unique/)を使用するべきです。 – robertklep

+0

ありがとう!ユニークなインデックスが私の仕事を減らしました – Vignesh

関連する問題