node.js - 获取请求适用于邮递员,但适用于浏览器
问题描述
从 POSTMAN 发送的获取请求有效,但从浏览器发送时失败。即使在使用 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.get
适用于axios.post
第二个参数是请求正文的地方。这不适用于axios.get
. 您可以将查询参数作为axios.get
. Postman 允许您使用 body 发出 GET 请求,服务器对此没有问题,但不建议这样做。对于您的身份验证用例,请使用POST。
推荐阅读
- javascript - 我可以使用 Javascript 遍历文件夹中的文件并在 HTML 页面上创建指向它们的链接吗?
- python - 使用 Python 的 http.server,我可以禁用目录列表吗?
- python - python中的重力加速度
- python - 从 IDE 中下载时的不同 PyCharm 版本
- reactjs - 为什么我不断收到 Syntax Error: JSON parse 即使我的代码与另一个 API 一起使用?
- python - Discord 机器人升级功能不起作用
- python - 如何调用特定对象的方法并仅影响作为pygame中字典键值的对象?
- next.js - getStaticProps 页面末尾的 _NEXT_DATA_ json 对象对 SEO 的影响
- entity-framework - 将项目添加到多对多关系.net核心时出现问题
- python - 如何改进 pytesseract 参数以正常工作