2017-08-15 2 views
0

文書を作成するPOST要求があります。私の問題は、検証が失敗した場合、mongooseが元の文書を応答の一部として設定することです。私はmongooseは、主にハッシュされたパスワードを既存の文書を送信しないようにしたいと思います。検証が失敗した場合、Mongooseは既存の文書を送信します

これはこれは、パス検証が失敗したときにマングースは、パスワードを送信しませんが、文書を作成または更新するとき、それだけ動作しますが、ないので、私が追加したいくつかのコードで応答

{ 
"code": 11000, 
"index": 0, 
"errmsg": "E11000 duplicate key error collection: ole.tournament index: name_1 dup key: { : \"First tournament\" }", 
"op": { 
    "name": "First tournament", 
    "tournType": "single elimination", 
    "seriesType": "bo1", 
    "password": "$2a$10$xhA5UkpK.xH4QROdHf/Os.djs9CcU3C8PPcM8j99RocYPHS3x0tIC", 
    "_creator": "5992734ebaa773270898e248", 
    "_id": "59927361baa773270898e24a", 
    "participants": [], 
    "startedDate": null, 
    "createdDate": "2017-08-15T04:06:57.640Z", 
    "__v": 0 
} 
} 

次のとおりです。

TournamentSchema.methods.toJSON = function(){ 
    var tournament = this; 
    var tournamentObject = tournament.toObject(); 
    return _.omit(tournamentObject, "password"); 
} 

これは私がこの問題を解決する簡単な方法は、OMIである知っている私のルート

.post('/add', authenticate, (req, res) => { 
    req.body._creator = req.user._id; 
    tournament = new Tournament(req.body); 
    tournament.save().then((tournDoc) =>{ 
    res.status(200).send(tournDoc); 
    }).catch((e) => { 
    res.status(400).send(e); 
    }) 
}) 

ですキャッチブロックでそれをttingしかし、これを行うためのマングースの方法はありますか?

ありがとうございました。

+0

あなたはいつもあなたが送信していること応答を操作することができますオブジェクト。 –

答えて

0

errmsgというエラーメッセージだけをクライアントに返送する必要があります。完全なエラーオブジェクトをクライアントに送るのは良い習慣ではありません。あなたは以下のコードを見ることができます:

.post('/add', authenticate, (req, res) => { 
    req.body._creator = req.user._id; 
    tournament = new Tournament(req.body); 
    tournament.save().then((tournDoc) =>{ 
     res.status(200).send(tournDoc); 
    }).catch((e) => { 
     res.status(400).send(e.errmsg); 
    }) 
}) 

それともあなたも以下のようなクライアントにあなたのカスタムエラーメッセージを送ることができます:ホワイトリストを作成し、

.post('/add', authenticate, (req, res) => { 
    req.body._creator = req.user._id; 
    tournament = new Tournament(req.body); 
    tournament.save().then((tournDoc) =>{ 
     res.status(200).send(tournDoc); 
    }).catch((e) => { 
     if(e.code == 11000) { 
     res.status(409).send("Validation failed!!"); 
     } 
     res.status(500).send("Error occurred!! Please try again."); 
    }) 
}) 
+0

はい、それは私がやらなければならないと思ったことです。私はこのマングースの行動を避ける選択肢があるだろうが。ありがとうございました。 –

関連する問題