使用mongoose

时间:2015-12-22 14:20:11

标签: javascript node.js forms session mongoose

注意:以下代码使用名为client-sessions by Mozilla

的模块

我有一个表单来注册用户,并在表单提交时将POST发送到app.post("/register)(在下面的代码中)。如果我然后转到/的主页路线,我可以看到输出用户信息的console.log(user)

这就是我想要的。

然而,

当我注册为新用户时我希望会话重置,当我第二次进入主页路由时,我希望看到新的用户信息输出到控制台 - 但我没有。相反,我看到了第一个用户信息。我想知道为什么会话没有被重置并替换为新的用户信息和/或我在这里不理解的内容。

谢谢。

app.use(session({
    cookieName: 'session',
    secret: "whatever",
    duration: 30 * 60 * 1000,
    activeDuration: 5 * 60 * 1000,
}))






app.get("/", function(req, res) {
    if (req.session.user === undefined) {
        res.render("index");
    } else {
        User.findOne(req.session.user.email, function(err, user) {

            console.log(user); //__________________This ALWAYS outputs the first user registered even if new users register

        })
        res.render("index");
    }
})


app.get("/register", function(req, res) {
    res.render("register");
})





//_______________________________________________BEGIN registration


app.post("/register", function(req, res) {
    req.session.reset();
    var user = new User({
        firstName: req.body.firstName,
        lastName: req.body.lastName,
        email: req.body.email,
        password: req.body.email,
        subscribed: false

    }).save(function(err) {
        req.session.user = user;
        res.redirect("/");
    })
})

//_______________________________________________END registration

ANSWER

答案是双重的。首先是下面接受的答案。

将会话存储在save方法中也没有意义。更正了以下代码

app.post("/register", function(req, res) {

    var user = new User({
        firstName: req.body.firstName,
        lastName: req.body.lastName,
        email: req.body.email,
        password: req.body.password,
        subscribed: false

    })

    req.session.user = user;    // This needed to be outside the save method

    user.save(function(err) {

        res.redirect("/");
    })
})

1 个答案:

答案 0 :(得分:1)

这不是会话的问题,而是您的数据库查询。

而不是

User.findOne(req.session.user.email, function(err, user) {

应该是

User.findOne({email: req.session.user.email}, function(err, user) {

否则,查询始终返回users集合中的第一个文档。