Nuxt项目中如何获取Express服务端session存储的userid值
问题原因
- 你未安装注册
@nuxtjs/session模块,this.$session不是Nuxt自带的全局属性,所以直接打印返回undefined - Express的session默认存储在服务端内存中,运行在浏览器侧的前端代码无法直接读取服务端内存数据,必须通过接口请求、服务端渲染注入两种方式拿到session值
解决方法
方案一:通过接口请求获取(推荐,逻辑更简单稳定)
不需要额外安装Nuxt侧的session模块,直接在Express侧新增返回session数据的接口,前端调用接口取值即可:
- 新增接口(在
/server/routes/login_router.js中添加)
router.get('/fetchUserid', (req, res) => { res.json({ userid: req.session.userid || '' }) })
- 前端调用接口取值(修改
/pages/login.vue的逻辑)
如果还没安装@nuxtjs/axios,先执行npm i @nuxtjs/axios,并在nuxt.config.js的modules数组中添加'@nuxtjs/axios'注册模块
<script> export default { methods:{ async submitTest(){ const { data } = await this.$axios.get('/login_router/fetchUserid', { withCredentials: true }) console.log('userid>>>', data.userid) } } } </script>
- 调整Express的CORS配置,允许携带凭证,否则请求不会携带session cookie导致服务端无法识别对应session
修改/server/app.js的cors配置:
app.use(cors({ credentials: true, origin: '你的Nuxt前端访问地址,比如http://localhost:3000' }))
方案二:使用this.$session直接取值
如果要直接通过全局属性读取session,需要安装配置对应的模块,同时保证前后端session存储互通:
- 安装依赖
npm install @nuxtjs/session
- 注册并配置模块(修改
nuxt.config.js)
export default{ modules: [ '@nuxtjs/dotenv', 'cookie-universal-nuxt', '@nuxtjs/session' // 新增模块 ], // 新增session配置,secret和express侧保持一致 session: { secret: 'secret key', resave: false, saveUninitialized: true } }
- 生产环境需要配置统一的session存储(比如Redis),默认的内存存储仅支持开发环境使用,会出现前后端session不互通的问题
内容的提问来源于stack exchange,提问作者niddddddfier
相关产品推荐
相关产品推荐

