Node.js &引用;req.session.user=user";其中未定义用户

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

我已经阅读了几乎所有可能的帖子、帖子、问题,我开始设置会话cookies,但仍然没有得到完美的解决方案

我已经创建了一个web应用程序,我想在其中设置已登录的会话Cookie

无法找出“用户”未定义的原因。我缺少什么?我做了所有的尝试和错误来找出错误

App.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>');
                    }
          });
       });
    });
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我也试过了,但还是没有改变。同样的错误。嘿,我在这里上传了完整的代码。你能帮我解决这个问题吗?谢谢你的努力。哇!它起作用了。谢谢非常感谢你。你为什么不考虑写一个独立的答案呢?其他有类似疑问的人可能会受益