使用Mongoose Session创建购物车时遇TypeError:无法为undefined设置'session'属性
解决req.locals.session赋值时的TypeError问题
嘿,我帮你找到了问题的根源!你遇到的这个TypeError: Cannot set property 'session' of undefined错误,其实是一个很容易犯的拼写小错误。
错误原因
在Express框架中,用于向模板引擎传递全局变量的是**res.locals**(响应对象的locals属性),而不是req.locals——请求对象根本没有locals这个属性,所以你尝试给req.locals.session赋值时,自然会因为req.locals是undefined而报错。
修复步骤
- 找到代码中这一行:
req.locals.session = req.session;
- 把它修改为:
res.locals.session = req.session;
额外注意事项
除了这个拼写错误,还要确保你已经正确配置了express-session中间件(包括Mongoose Session的存储配置),否则req.session本身也可能是undefined,导致新的问题。比如你的配置应该类似这样:
const session = require('express-session'); const MongoStore = require('connect-mongo'); // 配置session中间件 app.use(session({ secret: 'your-strong-secret-key', // 替换成你的自定义密钥 resave: false, saveUninitialized: false, store: MongoStore.create({ mongoUrl: 'your-mongodb-connection-string' // 也可以传入已有的mongoose连接实例 }), cookie: { maxAge: 24 * 60 * 60 * 1000 } // 可设置session有效期,比如1天 }));
修改完成后重启服务器,再测试购物车的功能,这个TypeError应该就会消失啦!
内容的提问来源于stack exchange,提问作者John Yaghobieh
相关产品推荐
相关产品推荐

