2017-08-15 61 views
0

我有一個POST請求來創建文檔。我的問題是貓鼬在驗證失敗時將原始文檔設置爲響應的一部分。我想讓貓鼬不要發現有的文件,主要是哈希密碼。當驗證失敗時,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"); 
} 

這是我的路線

.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); 
    }) 
}) 

我知道一個快速的方法來解決這個問題是OMI把它放在catch塊中,但是有沒有一種貓鼬的方法來做到這一點?

謝謝。

+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

是的,這就是我想我必須做的。我雖然會有避免這種貓鼬行爲的選擇。謝謝。 –