express获取不到储存的session

316 阅读1分钟

背景

  • 写了一个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) => {
// 用户使用指定name登录,并把name存入session中
    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来做前端跨域处理。
  • 最后解决

想想还是有点坑,做一下记录。