我正在用节点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的函数返回?提前谢谢!
答案 0 :(得分:1)
一个简单的解决方案是使 handleFailure 不需要回调。
function handleFailure(res) {
res.status(401).json({
message: 'Not authorized'
});
}
// Somewhere else in the code
if(tokenVal.mode !== 'cust') {
handleFailure(res);
return;
}
else if(tokenVal.exp < Date.now()) {
handleFailure(res);
return;
}
答案 1 :(得分:0)
您可以返回handleFailure
函数,因此当前函数的执行结束,同时您正在处理失败(发回401响应)。
function handleFailure(res) {
res.status(401).json({
message: 'Not authorized'
});
}
if(tokenVal.mode !== 'cust') {
return handleFailure(res);
}
else if(tokenVal.exp < Date.now()) {
return handleFailure(res);
}