我尝试在使用保存功能之前检查令牌是否唯一,因为无法从内部创建令牌。
我试图使用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!')
}
});
};
由于令牌是在服务器端创建的,因此服务器有责任提供唯一的令牌并防止错误。
答案 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);
}
});