Express.js无法正确读取req.session.user对象问题排查
问题排查:角色判断因字符串空格失效
当前代码中,即便req.session.user.role的值是带末尾空格的'admin ',条件判断req.session.user.role === "admin"也无法识别为管理员角色,输出结果显示该用户被判定为非管理员。且该功能此前正常,重启Node.js服务器后出现此问题。
相关代码
const db = require('../config/db.js'); const { Request } = require('mssql'); loadForm = (req, res) => { if(req.session.user.role === "admin"){ console.log(req.sesion.user); // 拼写错误:sesion → session console.log(req.session.user + 'is an admin'); } else { console.log(req.session.user); console.log(req.session.user + 'is not an admin '); } } module.exports = { loadForm }
输出结果
username: 'daniel', password: 'letmein1', role: 'admin ', full_name: 'Daniel Medina' } [object Object]is not an admin
排查与解决建议
- 处理字符串空格:严格相等判断
===会区分带空格和不带空格的字符串,需对角色值做去空格处理,修改判断逻辑为:if(req.session.user.role.trim() === "admin") { // 原有逻辑 } - 检查数据库数据:确认数据库中该用户的
role字段值是否被意外添加了末尾空格——功能此前正常,大概率是数据层面出现了变化。 - 清理会话缓存:重启服务器后,旧会话可能被替换,尝试清除用户浏览器的会话cookie,重新登录后查看会话中的
role值是否仍带空格。 - 修正代码拼写错误:代码中存在
req.sesion.user的拼写错误(应为req.session.user),虽不直接影响角色判断,但会引发控制台报错,建议修正。 - 检查数据库字段类型:若
role字段为固定长度的CHAR类型,存储时会自动补空格,可考虑改为VARCHAR类型,或在读取数据时统一去除空格。
内容的提问来源于stack exchange,提问作者Tyler Ewing
相关产品推荐
相关产品推荐

