Javascript Fetch未从节点Js接收错误消息
发生了什么: 我的项目有一个名为Javascript Fetch未从节点Js接收错误消息,javascript,ajax,fetch,Javascript,Ajax,Fetch,发生了什么: 我的项目有一个名为/login的路由,当用户尝试登录而他不是“管理员”(数据库的属性)时,它应该给出一个401错误。在后端,它正在工作,但在前端的提取中没有收到错误,我不知道为什么 My code Node.js: const{ findByMail }=需要('../data/acl/acl.model'); 模块.出口= 异步函数已验证(req、res、next){ const acl=await findByMail(req.body.username); if(acl&&a
/login
的路由,当用户尝试登录而他不是“管理员”(数据库的属性)时,它应该给出一个401错误。在后端,它正在工作,但在前端的提取中没有收到错误
,我不知道为什么
My code Node.js:
const{
findByMail
}=需要('../data/acl/acl.model');
模块.出口=
异步函数已验证(req、res、next){
const acl=await findByMail(req.body.username);
if(acl&&acl.role!=“管理者”){
res.status(401).send(“您没有访问权限”)
}
下一个()
}
我的前端:
handleLogin=async()=>{
试一试{
这是我的国家({
加载:正确
});
const rawResponse=wait fetch(“/login”{
方法:“POST”,
标题:{
接受:'application/json',
“内容类型”:“应用程序/json”
},
正文:JSON.stringify({…this.state)
}),
});
const response=await rawResponse.json();
setItem('user-token',response.token);
这是我的国家({
加载:错误
});
}捕捉(错误){
这是我的国家({
加载:错误
});
控制台日志(err);
}
};
Console.log:
SyntaxError: Unexpected token F in JSON at position 0
at Login._callee$ (login.js:18)
at tryCatch (runtime.js:62)
at Generator.invoke [as _invoke] (runtime.js:296)
at Generator.prototype.(anonymous function) [as next] (https://localhost:3000/static/js/bundle.js:103406:21)
at step (background.login.png:1)
at background.login.png:1
login.js:18 POST https://localhost:3000/login 401 ()
我不知道怎么了,有人能帮我吗?问题很简单,fetch()不认为401代码是不可接受的响应,因此不会调用catch,相反,它会像200代码一样继续执行代码 收到回复后,您应该执行以下操作:
handleLogin = async() => {
try {
this.setState({
loading: true
});
const rawResponse = await fetch('/login', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json'
},
body: JSON.stringify({ ...this.state
}),
});
if(!rawResponse.ok){
this.setState({
loading: false
});
}
else{
const response = await rawResponse.json();
localStorage.setItem('user-token', response.token);
this.setState({
loading: false
});
}
} catch (err) {
this.setState({
loading: false
});
console.log(err);
}
};
试着调试json如果它的格式正确,它会正确地进行提取,但是当到达
catch
时,错误的消息就不起作用了。你试着调试这行代码:json.stringify({…this.state}),你的响应是什么样子的?某个地方的一些代码正试图将以“F”开头的东西解析为json,这不是有效的JSON。您需要在浏览器开发工具的“网络”选项卡中检查请求的结果。您好,朋友,感谢您的回答,我将其放入{catch(err){your code}
?我这样做:catch(err){if(!err.ok){console.log(err.status)}
并且返回值是未定义的
,我编辑了我的答案,并根据您的代码添加了一个工作示例。您不工作是什么意思?您有任何错误吗?返回值是未定义的