2 回答
TA贡献1799条经验 获得超8个赞
当遇到网络错误或服务器端 CORS 配置错误时, fetch() Promise 将拒绝并返回 TypeError [developer.mozilla.org]
您需要使用 res.ok 来检查 HTTP 错误
register = event => {
console.log(this.state.credentials);
fetch('http://api.herokuapp.com/account/users/', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(this.state.credentials)
}) .then(res => {
if(res.ok) {
window.location.href = '/'
} else {
alert("Invalid information, please reenter your details correctly")
window.location.href = '/Oko/RegisterUser'
}
})
.catch(error => console.log(error))
}
TA贡献1921条经验 获得超9个赞
您的请求始终执行 .then 块内的代码,因为如果收到 HTTP 错误代码,则 fetch 不会失败。
来自 MDN 文档:
即使响应是 HTTP 404 或 500,从 fetch() 返回的 Promise 也不会拒绝 HTTP 错误状态。相反,它将正常解析(将 ok 状态设置为 false),并且仅在网络故障或如果有任何事情阻止请求完成。
就像文档所说,您需要检查 .then 块中响应对象的属性是否正确:
register = event => {
fetch('http://api.herokuapp.com/account/users/', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify(this.state.credentials)
}) .then(res => {
if(res.ok) {
window.location.href = '/'
}else{
alert("Invalid information, please reenter your details correctly")
window.location.href = '/Oko/RegisterUser'
}
}).catch(error => console.log(error))
}
- 2 回答
- 0 关注
- 114 浏览
添加回答
举报