我正在用节点js写我的后端,而且由于我对节点及其异步本质相当陌生,因此需要澄清。我试图实现的是在身份验证失败的情况下从中间件功能返回。我可以通过在每个条件之后使用return;
来实现,但是这样我必须为每个条件设置res对象的一些值。例如:从失败时返回函数
if(recvToken) {
try {
let tokenVal = jwt.decode(recvToken, app.get('jwtToken'));
if(tokenVal.exp < Date.now()) {
res.status(401).json({
success: false,
message: 'Auth failed',
details: 'Some other details'
// And a few more fields
});
}
else if(tokenVal.mode !== 'cust') {
res.status(401).json({
success: false,
message: 'Auth failed',
details: 'Some other details'
// And a few more fields
});
}
else {
// A few more conditions, you get the gist
}
}
catch (err) {
return;
}
}
else {
return;
}
这是行得通的。但我想有一个函数来处理所有这些失败。我搞砸了一下周围,并结束了一句:
function handleFailure(res, cb) {
res.status(401).json({
message: 'Not authorized'
});
cb();
}
这是从所有的条件代码调用,如:
if(tokenVal.mode !== 'cust') {
handleFailure(res, function() { return; });
}
else if(tokenVal.exp < Date.now()) {
handleFailure(res, function() { return; });
}
确保它看起来干净,但它并没有因为工作的回报在回调函数中,从回调函数返回而不是父函数。 有没有这种类型的东西可以做到从调用handleFailure的函数返回?提前致谢!
为什么您需要将回调传递给'handleFailure'?由于它全部是同步的,你可以返回。 – schroffl
@schroffl如果没有设置res对象,是否不可能从函数返回?如果没有,我觉得这个问题很愚蠢...... – Zeokav
“没有设置res对象”是什么意思?如果我正确地解释了你的问题:你可以在调用'res.status'之前返回,或者在if语句中包装所有东西。 – schroffl