2013-07-20 20 views
0

因此,當用戶通過Google,Twitter等註冊時,名稱可能會重疊。在我的應用程序中,用戶名擁有唯一的索引。由於每當有人首次登錄時都會將新文檔放入集合中,因此有時唯一索引會失敗。對於註冊用戶的代碼是這樣的:當MongoDB上的唯一索引失敗時生成替代文件

module.exports.findOrCreateUser = (provider, id, data, done) -> 
    User.findByAuth provider, id, (err, user) -> 
     if err? then done err 
     else if user? then done null, user 
     else 
      user = new User 
       auth: [{id: id, provider: provider}] 
       name: data.name 
       email: data.email 
      user.save (err) -> 
       if err? then done err else done null, user 

所以,我有兩個問題在這裏:

  1. 我如何檢查是否err是唯一索引錯誤?
  2. 什麼是追加唯一後綴到用戶名最有效的方式?
+0

如何爲用戶用於登錄的服務添加前綴/後綴?例如google_username,twitter_username,facebook_username,... – innoSPG

+0

對於Q(1),我確定'err'應該包含一個錯誤代碼以及類似「重複鍵錯誤索引」的描述性消息。你應該記錄一次'err',以便知道。 –

+0

@innoSPG:這是一個好主意。我從來沒想過這點。雖然我想避免他們用來登錄的服務的跡象... – Lanbo

回答

2
  1. err對象具有匹配該錯誤消息的蒙戈殼將給出message屬性。檢查是否有唯一索引錯誤應該是這個樣子:

    if (err && err.message.indexOf('E11000 ') !== -1) { 
        // this _id was already inserted in the database 
    } 
    
  2. 我@innoSPG同意服務名稱追加到用戶名。如果您不想指示與用戶名關聯的服務,只需在用戶名後面添加一個計數器,並在每次使用時增加該值。

相關問題