我正在使用NodeJS
和sequelize
。我的应用程序中有两种登录方式。一个是普通用户登录,一个是公司登录。
下面的代码首先在公司表中查找令牌,如果它不存在,则移动到用户表中以找到它。
这样我知道谁登录了系统。
有更好的方法吗?
OR
有没有办法可以同时搜索两个表而不是等待sequelize
在一个表中搜索然后再执行另一个表?
var token = req.get('Auth') || '';
db.token.findOne({
where:{
tokenHash: cryptojs.MD5(token).toString()
}
}).then(function(tokenInstance){
if(!tokenInstance){
throw new Error();
}
req.token = tokenInstance;
return db.company_auth.findByToken(token); //looks in the first table (company)
}).then(function(entity){
if(entity === null){
return db.user.findByToken(token); //if not found (then looks in the second table - user)
}else{
req.entity = entity;
next();
}
}).then(function(user){
req.user = user;
next();
}).catch(function(e){
console.log(e);
res.status(401).send();
});
TIA!
答案 0 :(得分:2)
是的,您可以轻松地同时在两个表中进行搜索,并使用Promise.all
等待两个结果:
db.token.findOne({
where:{
tokenHash: cryptojs.MD5(req.get('Auth') || '').toString()
}
}).then(function(tokenInstance){
if (!tokenInstance)
throw new Error("found no token");
req.token = tokenInstance;
return Promise.all([
db.company_auth.findByToken(token), //looks in the first table (company)
db.user.findByToken(token) // also looks in the second table - user)
]);
}).then(function([entity, user]){
if (entity === null){
req.user = user;
} else {
req.entity = entity;
next();
req.user = undefined;
}
next();
}).catch(function(e){
console.log(e);
res.status(401).send();
});