页面用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:"登录失败"})
}
})