Node.js &引用;req.session.user=user";其中未定义用户
我已经阅读了几乎所有可能的帖子、帖子、问题,我开始设置会话cookies,但仍然没有得到完美的解决方案 我已经创建了一个web应用程序,我想在其中设置已登录的会话Cookie 无法找出“用户”未定义的原因。我缺少什么?我做了所有的尝试和错误来找出错误 App.js文件Node.js &引用;req.session.user=user";其中未定义用户,node.js,session,Node.js,Session,我已经阅读了几乎所有可能的帖子、帖子、问题,我开始设置会话cookies,但仍然没有得到完美的解决方案 我已经创建了一个web应用程序,我想在其中设置已登录的会话Cookie 无法找出“用户”未定义的原因。我缺少什么?我做了所有的尝试和错误来找出错误 App.js文件 const session = require('client-sessions'); app.use(cookieParser()); app.use(session({ cookieName: 'sessionc
const session = require('client-sessions');
app.use(cookieParser());
app.use(session({
cookieName: 'sessioncookie',
secret: 'long_string_which_is_hard_to_crack',
duration: 30 * 60 * 1000,
activeDuration: 5 * 60 * 1000,
}));
router.post('/login', (req, res) => {
const emaild = req.body.email;
const passd = req.body.pass;
db.collection('check').findOne({email: emaild}, (err, result) => {
if (err) return console.log(err);
console.log(result.passcode);
console.log('Retrived from database');
bcrypt.compare(passd, result.passcode, function(err, boolean) {
console.log(boolean);
if(boolean == true) {
req.session.user = user; //// It's Undefined
res.redirect('/dashboard');
} else {
res.send('<h1>Wrong Password</h1>');
}
});
});
});
Routes.js文件
const session = require('client-sessions');
app.use(cookieParser());
app.use(session({
cookieName: 'sessioncookie',
secret: 'long_string_which_is_hard_to_crack',
duration: 30 * 60 * 1000,
activeDuration: 5 * 60 * 1000,
}));
router.post('/login', (req, res) => {
const emaild = req.body.email;
const passd = req.body.pass;
db.collection('check').findOne({email: emaild}, (err, result) => {
if (err) return console.log(err);
console.log(result.passcode);
console.log('Retrived from database');
bcrypt.compare(passd, result.passcode, function(err, boolean) {
console.log(boolean);
if(boolean == true) {
req.session.user = user; //// It's Undefined
res.redirect('/dashboard');
} else {
res.send('<h1>Wrong Password</h1>');
}
});
});
});
router.post('/login',(req,res)=>{
const emaild=req.body.email;
const passd=req.body.pass;
db.collection('check').findOne({email:emaild},(err,result)=>{
if(err)返回console.log(err);
console.log(result.passcode);
log('从数据库检索');
比较(passd,result.passcode,函数(err,boolean){
log(布尔值);
如果(布尔==真){
req.session.user=user;///未定义
res.redirect('/dashboard');
}否则{
res.send(“错误密码”);
}
});
});
});
当您使用findOne
方法查询您的收藏时,它将返回相关文档(此处为user
,您将其命名为result
),您应该使用一个有意义的参数命名它,如user
,然后user
成为此回调函数中可用的名称
另外,当您在req.session.user=user上出现以下错误时代码>:
无法设置未定义的属性“user”
这意味着req.session
是未定义的
。使用express,通过会话中间件
根据请求设置会话
。在这里,您使用的是在初始化时通过cookieName
选项值传递的附加会话。因此,应按如下方式进行设置:
req.sessioncookie.user = user;
请注意,中间件排序确实很重要。在设置路由之前,应该使用中间件配置应用程序。这样,每个传入的请求都会填充您已设置的所需配置。用户与您从数据库中检索到的项目相同,在这里您将其命名为result
,因此您应该使用:req.session.user=result代码>我已将其更改为req.session.user=result;但是,=>仍然无法设置未定义的属性“user”。我还尝试了“result.email”,这是从数据库中派生的用户的电子邮件地址。这意味着req.session
未定义。查看一下,它似乎通过cookieName
属性值将会话附加到req;所以您应该使用:req.sessionokie.user=result代码>我也试过了,但还是没有改变。同样的错误。嘿,我在这里上传了完整的代码。你能帮我解决这个问题吗?谢谢你的努力。哇!它起作用了。谢谢非常感谢你。你为什么不考虑写一个独立的答案呢?其他有类似疑问的人可能会受益