我尝试创建一个函数,生成一个在我的数据库中不存在的随机标记( Mongodb ),并在我的用户模式中使用唯一属性。这是我的功能:
var UniqueTokenGenerator = function () {
var token = uuid.v4();
UserModel.findOne({token : token} , (err , user)=> {
if(err)
res.status(500).send(err);
else if(user){
//1
}else if(!user){
return token; //2
}
});
};
我的问题:
我不想使用像jwt
这样的库。
答案 0 :(得分:0)
两个答案:
首先,您不需要检查数据库以确保您的UUID是唯一的。 UUID非常大,数学上你不会遇到碰撞。见Are GUID collisions possible?
其次,要做你正在尝试做的事情,你需要使你的函数异步并通过回调传递结果。 E.g。
var generateUniqueToken = (callback) => {
var token = uuid.v4();
UserModel.findOne({ token: token }, (err, user) => {
if(err) {
// First parameter of the callback is an error.
callback(err);
} else if (user) {
// Try again.
generateUniqueToken(callback);
} else if (!user) {
// First parameter of the callback is an error. The second
// parameter is the successful result.
callback(null, token);
}
});
};
// Example usage:
generateUniqueToken((err, token) => {
if (err) {
res.status(500).send(err);
} else {
// Use the token here.
}
});