2017-02-21 53 views
0

我與插入文件只如果不是已經存在

Subscription.create({ email: req.body.email }, (err, subscription) => { 
    // 
}); 

我已經在我的貓鼬架構獨特的電子郵件字段創建文檔,所以它不可能產生具有相同的電子郵件多個文檔。

但我不在乎某個電子郵件是否已經存在,所以我不想重複錯誤,因爲我現在收到。我如何才能插入,只有當電子郵件不存在,而不是創建,如果它確實存在,但不告訴用戶?

我認爲最好不要告訴用戶電子郵件是否已存在於數據庫中,因爲它可用於測試電子郵件是否與網站相關聯。這似乎沒有什麼問題,但我仍然認爲最好不要因隱私問題而告知。

+0

在創建文件之前我們只能通過電子郵件找到,不是嗎? – BNilsou

+0

正如@BNilsou所說,您只需在創建之前查看數據庫,使用貓鼬即可使用[findOne](http://mongoosejs.com/docs/queries.html)查詢,同時它也不是一個安全問題,用戶「這封電子郵件已被使用」,我參加過的每個網站都有一個註冊表單,迴應是「此電子郵件/用戶名已被使用」。 – George

+0

我的經歷就是在我的網站上,儘管我已經註冊了通訊,但我仍然可以再次註冊。但也許我應該考慮讓用戶知道 – Jamgreen

回答

0

貓鼬中可以使用pre函數。

var schema = new Schema(..); 
schema.pre('save', function(next) { 
    // Check if the mail exists. If it does, just throw an exception 
    // If not, just create the thing using next. 
    next(); 
}); 

當你調用保存函數時,你應該小心地捕獲異常。我相信這會完成這項工作。

+0

這是首選檢查我的控制器? – Jamgreen

+0

這是一個品味的問題。由於效率等原因,我總是喜歡使用庫中的內置函數(至少是着名的函數)。而且,如果你需要添加更多的規則,你可以去同一個地方 –

相關問題