request .session.users在其他路由中不可用



我现在正在使用nodejs与express session和connect session sequelize。

目前,我正试图从会话传递我的userID,并在另一个添加产品页面访问。这样数据库就可以根据userID进行识别。我得到请求。会话。用户不是一个函数。

下面是我的代码。

会话登录页面:

const User = require('../models/user')
exports.postLoginPage = (req,res,next) =>{
User.findByPk(1)
.then(users =>{
req.session.isLoggedIn = true;
req.session.users = users;
res.redirect('/');
})
.catch(err =>{
console.log(err)
})
}

addProduct Page

exports.postaddProductsMale = (req,res,next) =>{
const title = req.body.title;
const imageUrl = req.body.imageUrl;
const price = req.body.price;
console.log(+req.session.users)
req.session.users.createProduct({
title:title,
imageUrl:imageUrl,
price:price
})
.then(results =>{
console.log('Product created')
res.redirect('male_section');
})
.catch(err =>{
console.log(err)
})
};

这是我的错误:

TypeError: req.session.users.createProduct is not a function
at exports.postaddProductsMale (C:UsersASUSDesktopHobbyprojectsjavascriptecommerce clothingmaarancodecontrollersadmin.js:28:23

我可以使用req将数据发送到其他路由。用户不确定为什么request .session.users不工作

感谢您对这个问题的反馈。谢谢你。

req.session必须是可序列化的,以便它可以存储在请求之间,参见这里的示例。但是像req.session.users.createProduct这样的函数是不可序列化的,所以它可能无法存活到下一个请求。

请看下面的例子

express()
.use(session({
secret: "Se$$ion",
resave: false,
saveUninitialized: false
}))
.use("/test", function(req, res) {
if (!req.session.mybool) {
req.session.mybool = true;
req.session.myfunc = function() {};
}
res.end(typeof(req.session.mybool) + " " + typeof(req.session.myfunc));
})
.listen(80);

如果您发出两个请求,第一个响应是boolean function,第二个响应是boolean undefined