0

因此,当用户通过 Google、Twitter 或其他方式注册时,名称可能会重叠。在我的应用程序中,用户名具有唯一索引。由于每当有人第一次登录时都会将新文档放入集合中,因此有时唯一索引会失败。注册用户的代码如下所示:

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. 将唯一后缀附加到用户名的最有效方法是什么?
4

1 回答 1

2
  1. err对象具有message与 mongo shell 给出的错误消息相匹配的属性。检查是否存在唯一索引错误应该如下所示:

    if (err && err.message.indexOf('E11000 ') !== -1) {
        // this _id was already inserted in the database
    }
    
  2. 我同意@innoSPG 将服务名称附加到用户名。如果您不想指示与用户名关联的服务,只需将一个计数器附加到用户名并在每次使用时递增它。

于 2013-09-18T15:01:43.883 回答