Node.js中如何通过重定向将用户ID等数据从post路由传到get路由
你遇到的问题核心是HTTP协议本身无状态,重定向后服务端默认无法将新请求和之前登录的用户关联,采用express-session配合MongoDB做会话存储即可解决,实操步骤如下:
- 第一步:安装所需依赖
npm install express-session connect-mongo
connect-mongo可以直接将会话数据存储到你正在使用的MongoDB中,避免服务端重启会话丢失,适配现有技术栈。
- 第二步:在项目入口文件(通常是app.js/index.js)中配置会话中间件
const session = require('express-session'); const MongoStore = require('connect-mongo'); // 放在所有路由配置之前 app.use(session({ secret: '替换为你自定义的随机加密字符串,不要泄露', resave: false, saveUninitialized: false, // 和你现有MongoDB的连接地址保持一致即可 store: MongoStore.create({ mongoUrl: '你的MongoDB数据库连接串' }), cookie: { maxAge: 1000 * 60 * 60 * 24 * 7, // 会话默认有效期7天,可自行调整 httpOnly: true // 禁止前端JS读取Cookie,提升安全性 } }))
- 第三步:修改登录POST路由,验证通过后将用户信息存入会话
// 你的账号密码校验逻辑执行完成,确认用户身份合法后 req.session.user = { _id: 数据库中查询到的用户_id, username: 用户名, avatar: 头像地址 // 按需存入其他需要展示的用户字段,不要存储密码等敏感信息 } // 再执行重定向逻辑 res.redirect('/user/get')
- 第四步:修改用户GET路由,从会话中读取用户信息传递给模板渲染
app.get('/user/get', (req, res) => { // 先校验用户是否已登录,未登录直接跳回登录页 if(!req.session.user) { return res.redirect('/login') } // 将会话中的用户数据直接传递给模板渲染 res.render('你的用户页模板名称', { user: req.session.user }) })
补充说明:如果需要做退出登录功能,直接调用req.session.destroy()销毁当前会话即可。
内容的提问来源于stack exchange,提问作者hemanth
相关产品推荐
相关产品推荐

