背景
- 写了一个express的小案例,使用express-session中间件来储存用户信息,核心代码如下
app.use(session({
secret: "keyboardcat",
resave: false,
saveUninitialized: true,
cookie: {
maxAge: 1000 * 60 * 60,
secure: false
}
}))
app.post('/api/login', (req, res) => {
if (req.body.name === 'slc6666') {
req.session.isLogin = true
req.session.name = req.body.name
res.send({
code: 666,
msg: '登录成功'
})
console.log(req.session);
} else {
res.send({
code: 666,
msg: '用户名错误'
})
}
})
app.get('/api/user', (req, res) => {
if (req.session.isLogin) {
res.send({
code: 666,
msg: req.session.name
})
} else {
res.send({
code: 666,
msg: '未登录'
})
}
})
- 以上代码在postman中测试,可正常使用,我用浏览器使用$.ajax就只能正常存入,第二次请求user接口拿不到存入的信息
- 这就给我整蒙了,查阅多方资料,未果。得到可能是域的问题
- 分析,假设是域的问题。导致浏览器每次发起时,express不能确定两次是同一个源发起的。导致拿不到name。浏览器发起跨域问题是用express的cors中间件解决的。而postman是软件自身走了代理。
- 验证,先把cors中间件注销。postman仍然正常,浏览器报错跨域问题
- 那我们浏览器端也是用前端代理的方式是否能解决?
- 于是我用webpack来做前端跨域处理。
- 最后解决
想想还是有点坑,做一下记录。