2016-11-21 6 views
0

と値xxxのために失敗した、followersという名前のスキーマフィールドはObjectIdの配列として型を持ちますマングースエラーが郵便配達

{ 
"title":"test title999", 
"text":"test text999b", 
"meta":[1, [], 'three', { four: 5 }], 
"followers":["582ff61afe100611809e7fa5"] 
} 

アプリケーションのExpress POSTルートがvalidateメソッドを持っており、私はこのエラーだとして上記metionned 1を除いてすべてのフィールドを持つ任意の問題を持っていなかった:

をPOSTデータはJSON形式を持っています
{ 
    "message": "Post validation failed", 
    "name": "ValidationError", 
    "errors ":{ 
     "followers ": 
     {"message ":"Cast to ObjectID failed for value\ "[ '\"577f9cecd71d71fa1fb6f43a\ "' ]\" at path \"followers\"", 
      "name": "CastError", 
      "kind": "ObjectID ", 
      "value ":["\"577f9cecd71d71fa1fb6f43a\""], 
      "path": "followers", 
      "reason": { 
       "message ":"Cast to ObjectId failed for value\ "[ '\"577f9cecd71d71fa1fb6f43a\"' ]\" at path\ "followers\"", 
       "name": "CastError", 
       "kind": "ObjectId", 
       "value": ["\"577f9cecd71d71fa1fb6f43a\ ""], 
       "path": "followers" 
      } 
     } 
    } 
} 

---- EDIT -----

POSTルートでvalidateメソッド:

app.post('/posts', function(req, res, next) { 
    var post = new Post(req.body); 
    post.validate(function(error){ 
     console.log("\n\n validate error : " + JSON.stringify(error) + "\n\n"); 
     if(error) return next(error); 
     post.save(function(error, result){ 
      console.log("\n\n save error : " + JSON.stringify(error) + "\n\n"); 
     if(error) return next(error); 
     res.send(result); 
    }); 
    }); 

}); 

とモデル:

var postSchema = new Schema({ 
    title:{ 
     type:String, 
     required:true, 
     trim:true, 
     match:/^([\w ,.!?]{1,100})$/ 
    }, 
    text:{ 
     type:String, 
     required:true, 
     max:2000 
    }, 
    followers:[Schema.Types.ObjectId], 
    meta:Schema.Types.Mixed, 
    viewCounter:Number, 
    published:Boolean, 
    createdAt:{ 
     type:Date, 
     default:Date.now, 
     required:true 
    }, 
    updatedAt:{ 
     type:Date, 
     default:Date.now, 
     required:true 
    } 

}); 
+0

妥当性確認の方法について詳しくご説明しますか?あなたのモデル? –

+0

完了、更新済み – Bardelman

答えて

0

あなたがする必要があります他のモデルをとすると、followers属性の参照をpostモデルに添付してください0それは以下のようになります:

followers: {type: Schema.Types.ObjectId, ref: 'User'} 

hereからマングースに参照については、こちらをご覧ください。

0

this oneとして)マングースに埋め込まれたドキュメントを使用するための出来上がり溶液をいくつかのより多くの例を読んだ後、私が見つかりました: followersフィールド値がオブジェクト内Stringように来ると自動的ObjectIdに変換することができません。それを解析することによって:

req.body.followers = JSON.parse(followers); 

他のフィールドに保存することができました。 POSTルートは次のようになりました:

app.post('/posts', function(req, res, next) { 
    req.body.followers = JSON.parse(req.body.followers); 
    var post = new Post(req.body); 
    post.validate(function(error){ 
     console.log("\n\n validate error : " + JSON.stringify(error) + "\n\n"); 
     if(error) return next(error); 
     post.save(function(error, result){ 
      console.log("\n\n save error : " + JSON.stringify(error) + "\n\n"); 
     if(error) return next(error); 
     res.send(result); 
    }); 
    }); 

}); 

したがって、POSTリクエストは100%、動的にすることはできず、いくつかの特定のconvertionsは、保存処理の前に行う必要があります。 Basim Hennawiについては、refフィールドをスキーマのフィールドに追加する必要はありません。

関連する問題