express post方法设置了响应头依然报跨域错误

博客探讨了在使用axios发送POST请求到Express服务器时遇到的跨域问题。尽管在Express中设置了允许所有来源的跨域请求,但由于预检请求(CORS)机制,浏览器仍会发送OPTIONS请求导致跨域错误。解决方案是正确配置Express以处理预检请求。
摘要由CSDN通过智能技术生成

页面用axios.create()调请求 localhost:8080

 axios.create({
    url:'login',
    method:'post',
    data:user,//{username:"admin",password:"admin"}
    headers:{
      'Content-Type':'application/json'
    },
    baseURL:"http://localhost:3000/api",
    timeout: 2000
  })

express用post接受处理请求 localhost:3000

在app.post里面设置res.header是不起作用的,浏览器控制台还是会报跨域的错误,

 原因是post请求实际上发起的是options请求。这一点可在network哪里看到服务器发起了两次请求。如果option无法通过,则不会发真的请求,而是报错,

var express = require('express');
var app = express();
var bodyParser = require('body-parser');

//post请求不能直接获取参数
app.use(bodyParser.json({ limit: '1mb'}))//body-parser 解析json格式数据
app.use(bodyParser.urlencoded({ extended: true}))

app.all('*',function(req,res,next){
    res.header('Access-Control-Allow-Origin', '*');//的允许所有域名的端口请求(跨域解决)
   res.header('Access-Control-Allow-Headers', 'Content-Type');
    next();
  })

app.post('/api/login',(req,res)=>{
    //在post里面设置允许跨域不起作用
  //res.header('Access-Control-Allow-Headers', 'Content-Type');
  //res.header('Access-Control-Allow-Origin', '*');
  let {username,password} = req.body;
  console.log(req.body);
  let user = userList.some(user => {
    return user.username==username && user.password==password
  })
  if (user) {
    let token = jwt.sign({username:username,password:password},"cube-ui",{expiresIn:'12h'});
    res.json({code:0,data:{msg:"登录成功",user:user,token:token}})
  } else {
    res.json({code:1,msg:"登录失败"})
  }
  
})

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值