如何检查猫鼬中是否存在值

时间:2019-07-16 12:10:13

标签: javascript node.js

我尝试在使用保存功能之前检查令牌是否唯一,因为无法从内部创建令牌。

我试图使用count,find和findOne函数,但没有成功...

exports.create_client = function(req, res){
    token = crypto.randomBytes(8).toString('hex') + '-' + crypto.randomBytes(8).toString('hex') + '-' + crypto.randomBytes(8).toString('hex')
    var client = new Client({
        first_name: req.body.first_name,
        last_name: req.body.last_name,
        phone_number: req.body.phone_number,
        pin_code: pincode_generator(6),
        token: token
    });
    client.save(function(err, userClient){
        if (err){
            if(err.errors.phone_number)
                res.status(400).send('Phone number is in use.');
            if(err.errors.token)
                res.status(400).send('Token is in use.');
        } else {
            res.status(201).send('User created successfully!')
        }
    });
};

由于令牌是在服务器端创建的,因此服务器有责任提供唯一的令牌并防止错误。

3 个答案:

答案 0 :(得分:2)

在将数据保存到Mongodb之前 你应该在用猫鼬定义模式时 将unique: true设置为要另存为唯一字段

 var clientSchema = new Schema({
   first_name: String,
    last_name: String,
    phone_number: {type: String , unique : true }
    pin_code: String,
    token: {type: String , unique : true }

});

您应该处理错误

答案 1 :(得分:0)

因此,我通过为save函数创建一个函数对象来解决我的问题,并在其中调用它以在需要时再次保存。

答案 2 :(得分:0)

您需要确保此值在数据库中是唯一的,如之前 rebai 所示

client.save((err) => {
  if (err) {
    if (err.name === "MongoError" && err.code === 11000) {
      if (err.keyPattern. phone_number) {
        return res.status(422).send({
          success: false,
          error: "phone_number is already used" });
      }
    }
    return res.status(422).send(err);
  }
});