Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.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
Node.js Get请求与邮递员一起工作,但与浏览器一起工作_Node.js_Reactjs_Rest_Axios_Cors - Fatal编程技术网

Node.js Get请求与邮递员一起工作,但与浏览器一起工作

Node.js Get请求与邮递员一起工作,但与浏览器一起工作,node.js,reactjs,rest,axios,cors,Node.js,Reactjs,Rest,Axios,Cors,从邮递员发送的Get请求有效,但从浏览器发送时失败。 在后端,即使在使用bodyparser中间件之后,req.body也是未定义的。 邮递员发出的同样的请求也有效 这是来自前端的axios调用 await axios.get(`${API_URL}/api/authenticate`, { accesstoken: localStorage.getItem("accesstoken") }, {

从邮递员发送的Get请求有效,但从浏览器发送时失败。 在后端,即使在使用bodyparser中间件之后,req.body也是未定义的。 邮递员发出的同样的请求也有效

这是来自前端的axios调用

await axios.get(`${API_URL}/api/authenticate`, {
            accesstoken: localStorage.getItem("accesstoken")
        },
            {
                headers: {
                    'Content-Type': 'application/json',
                    'Accept': 'application/json',
                    'Access-Control-Allow-Origin': '*',
                    'Accept-Encoding': 'gzip, deflate, sdch'
                }
            })
            .then((res) => console.log(res))
            .catch((err) => {
                localStorage.removeItem("accesstoken");
                console.log(err)
            });
这是后端身份验证处理程序

const isAuthenticated = (req,res,next)=>{
    const accesstoken = req.body.accesstoken;
    console.log(req.body);
    if(!accesstoken)
   {
    
    res.json({msg:"No token provided"});
   }
   else
   {
    jwt.verify(accesstoken,process.env.ACCESS_TOKEN_SECRETE,(err,decoded)=>{
        if(err)
        {
            
            res.json({msg:"Invalid token"});
        }
        else
         next();
        
    });
   }

}
这些是cors选项

app.use(cors({
  origin:["http://localhost:3000","http://192.168.0.86:3000"],
  optionsSuccessStatus:200,
  credentials:true,
  allowHeaders:["Content-Type"]
}));

我猜,你是想做axios。post:

await axios.post(`${API_URL}/api/authenticate`, {
  accesstoken: localStorage.getItem("accesstoken")
},
  {
      headers: {
          'Content-Type': 'application/json',
          'Accept': 'application/json',
          'Access-Control-Allow-Origin': '*',
          'Accept-Encoding': 'gzip, deflate, sdch'
      }
  })
  .then((res) => console.log(res))
  .catch((err) => {
      localStorage.removeItem("accesstoken");
      console.log(err)
  });

用于
axios.get
的方法签名适用于
axios.post
,其中第二个参数是请求主体。这不适用于
axios.get
。您可以将查询参数作为
axios.get的第二个参数传递。Postman允许您使用body发出GET请求,服务器对此没有问题,但不建议这样做。对于您的身份验证用例,请使用POST

您能捕获两个请求(例如,使用tcpdump或wireshark)并区分它们吗?感谢您的回复@AllanWind,实际上我有点不知道tcpdump或wireshark,但我可以向您展示后端请求对象的分解。感谢您回复@AjeetShah,事实上,它可以与POSTMAN配合使用,但当从浏览器发送时,它会给出{msg:“未提供令牌”},在POSTMAN中它会返回{msg:“用户已通过身份验证”}。谢谢@AjeetShah,它达到了我的目的,但我很想知道它如何与POSTMAN配合使用,请您解释一下。您真的在POSTMAN中使用了
GET
?您不能使用
GET
发送数据。我不知道为什么,但它起作用了!嘿@AjeetShah。使用邮递员是可以做到的。非常感谢@LakshyaThakur@makarand您应该接受这个答案。在我的回答中,我认为你打错了。此外,您可能需要阅读以下内容:。使用
POST
发送数据,直到所有人(MDN、邮递员、浏览器、HTTP客户端库等)开始允许
data
进入
GET
。绝对没问题@AjeetShah,我已经做了更改,它工作得非常完美,谢谢。