这是一个由两部分组成的问题,第一部分是针对我的个人情况,第二部分是对事物运作方式的整体理解。
我正在为我的应用程序执行密码重置。电子邮件连同jwt
URL 的附件一起发送。在用户单击 URL 后,他们会被带到重置密码页面,该页面会触发具有jwt
直通componentWillMount
功能的操作。然后此操作会触发fetch
:
static verifyResetPasswordToken(token) {
const obj = JSON.stringify(token);
return fetch('/api/auth/verifyResetPasswordToken', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
credentials: 'include',
body: obj
})
.then(res => {
console.log('THEN');
})
.catch(error => {
console.log('CATCH');
});
}
在 API 上,我通过获取在正文中传递的令牌并检查它是否已过期来处理此问题:
export function verifyResetPasswordToken(req, res, next) {
const token = jwt.decode(req.body.token);
if (token.exp > Date.now() / 1000) {
res.status(200).json();
} else {
res.status(401).json();
}
}
注意我知道这不是检查令牌有效性的安全方法。我只需要弄清楚它是否过期。
这就是混乱所在。当401
状态返回时,我的承诺被拒绝。我的理解是fetch
不以这种方式处理错误。唯一要注意的fetch
是,即使出现 400 和 500 个 http 状态错误network connectivity
,我仍然应该遇到问题。then()
关于为什么我的承诺被拒绝的任何想法401
?为什么我会降落在catch
街区?我该如何避免这种情况发生?如何处理我想在我的服务器上响应的不同状态?
我的第二个问题围绕着所有这些。处理服务器错误的最佳实践是fetch
什么React
Redux
?这是我第一次使用fetch
,任何可以理解我应该如何处理服务器端错误的信息将不胜感激。
static verifyResetPasswordToken(token) {
const obj = JSON.stringify(token);
return fetch('/api/auth/verifyResetPasswordToken', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
credentials: 'include',
body: obj
})
.then(res => {
if(res.ok) {
console.log('THEN');
} else {
console.log('ELSE');
}
})
.catch(error => {
console.log('CATCH');
});
}