[英]How to check if a value exists in mongoose
我尝试在使用保存功能之前检查令牌是否唯一,因为我无法从内部创建令牌。
我曾尝试使用 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!')
}
});
};
因为令牌是在服务器端创建的,服务器有责任提供唯一的令牌并防止错误。
在将数据保存到 Mongodb 之前,您应该同时使用 mongoose set 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 }
});
你应该处理错误
因此,我通过为 save 函数创建一个函数对象并在需要时从其中调用它以再次保存来解决我的问题。
您需要确保此值在数据库中是唯一的,如之前 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);
}
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.