我有一个在某个端口上运行的 Angular 应用程序,以及在另一个端口上运行的 Express 服务器。 两者都在我的笔记本电脑上本地运行。
我正在通过从 Angular 向 Express 发送请求来测试我的 api,当 JWT 令牌过期时,我遇到了捕获错误的问题。
exports.someFunction = async (req, res, next) => {
if(!jwt.verify(payload, SECRET)) {
return res.status(400).json('someError');
}
jwt.verify(payload, SECRET, async function(err, decoded) {
if (err) {
return res.status(400).json('someError');
}
else {
return res.status(200).json('someResponse');
}
})
}
现在,它不会像在具有相同错误代码的数据库查询失败的情况下那样向我的角度应用程序发送错误,而是立即中断快速侦听过程并出现过期错误:
TokenExpiredError:jwt 已过期
我现在需要能够捕获该错误,这样我就知道将其部署到生产服务器上后不会成为问题。
我找到了捕捉 Express 错误而不中断监听的正确方法:
jwt.verify(token, SECRET, async function(err, decoded) {
if (err) {
if (err.name === 'TokenExpiredError') {
return res.status(401).json({ error: 'Token expired' });
}
if(err.name === 'JsonWebTokenError') {
return res.status(401).json({ error: 'Token invalid' });
}
}
else {
return res.status(200).json('Token verified');
}
})