Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 带有授权标头的Get请求在React中不起作用_Javascript_Reactjs_Axios_Jwt_Mern - Fatal编程技术网

Javascript 带有授权标头的Get请求在React中不起作用

Javascript 带有授权标头的Get请求在React中不起作用,javascript,reactjs,axios,jwt,mern,Javascript,Reactjs,Axios,Jwt,Mern,我已经用JWT开发了一个系统来验证用户,即使是验证过程也可以正常工作,当我使用postman检查后端时,它也会给我预期的结果。但由于某种原因,当我尝试使用AXIOS从前端使用相同的API调用时,它不起作用。 在使用这个特定的前端组件之前,我已经将JWT保存到浏览器中的本地存储中,因此在这个组件中,我使用useffectreact钩子调用后端API并尝试获取相关数据。我将把前端代码放在下面 import React,{useffect,useState}来自“React”; 从“axios”导入

我已经用JWT开发了一个系统来验证用户,即使是验证过程也可以正常工作,当我使用postman检查后端时,它也会给我预期的结果。但由于某种原因,当我尝试使用AXIOS从前端使用相同的API调用时,它不起作用。 在使用这个特定的前端组件之前,我已经将JWT保存到浏览器中的本地存储中,因此在这个组件中,我使用useffectreact钩子调用后端API并尝试获取相关数据。我将把前端代码放在下面

import React,{useffect,useState}来自“React”;
从“axios”导入axios;
const ResearcherProfileScreen=(道具)=>{
const[userData,setUserData]=useState(null);
useffect(()=>{
让currentToken=localStorage.getItem(“authToken”);
警报(currentToken);
const fetchUserData=async()=>{
试一试{
常量配置={
标题:{
“内容类型”:“应用程序/json”,
授权:`Bearer${currentToken}`,
},
};
等待axios
.get(“http://localhost:5000/api/auth/researcher/profile“,配置)
。然后((res)=>{
setUserData(res.data.Research);
警报(“数据提取完成!”+userData.username+“欢迎”);
})
.catch((错误)=>{
localStorage.removietem(“authToken”);
props.history.push(“/login”);
警报(“您未经授权,请登录”);
});
}捕捉(错误){
警惕(err);
}
};
fetchUserData();
},[道具历史];
常量logOutHandler=()=>{
localStorage.removietem(“authToken”);
警报(“令牌已删除:”+localStorage.getItem(“authToken”);
};
返回(
研究员简介
{userData&&Log Out}
);
};

导出默认ResearchProfileScreen获取数据后,如果HTTP请求中没有错误,则块将执行。 在then块中,我使用setState hook(setUserData)来存储获取的数据,在该行之后,有另一个命令使用先前获取的数据显示警报消息。
但实际上,使用setState方法存储数据需要一些时间,因此警报消息无法找到所需的数据,并引发错误,因此执行会跳转到catch块。

能否提供浏览器网络调用的屏幕截图?我想看看实际的问题我找到了错误的根源,似乎在获取数据之后,在数据加载到setState之前有一点时间间隔。由于需要一些时间,“then”块无法正确执行,因为我编写了一些警报弹出命令来检查数据是否已加载。然后((res)=>{setUserData(res.data.研究员);提醒(“数据获取完成!”+userData.username+“欢迎”);})感谢您的帮助。我真的很感激:-)