无法设置未定义的属性“名称”

时间:2018-08-25 14:12:38

标签: node.js express session cookies express-session

因此,我是express(以及整个后端)的新手,公平地说,我并不确切地知道如何使用sessions(我首先使用cookie,但后来我听到了sessions更好地维护用户状态),所以我安装了express-session并像这篇文章一样做到了:

https://stackoverflow.com/a/37608202/5737650

我将会话保存在变量(sess)中的位置,然后我习惯将信息取出来,但问题是sess似乎只是cookie对象,而不是其他信息我需要保存用户输入,这给了我这个错误:

Cannot set property "name" of undefined

这是我的代码,它的工作是注册用户,将数据保存到数据库,然后当它进入登录页面时,它检查他的输入是否存在于数据库中,如果不存在,它将给我一个{ {1},如果存在,它将把数据保存到会话中,以便以后可以保持其状态,但是当我输入正确的输入时,它给了我上面的错误:

console.log

如何解决此问题并获得所需的结果(将其状态保持为整个网站记录的状态)?

1 个答案:

答案 0 :(得分:1)

代码中有几个错误。

  1. 最初,会话对象将没有user对象。因此sess.user将是undefined。因此,第一个错误Cannot set property "name" of undefined是有意义的。您可能要初始化sess.user以先清空对象。

  2. 使用POST请求,您需要调用.save()上的req.session进行保存。进一步了解here

这是我在计算机上尝试过的代码:

app.post("/Login", (req, res) => {
    let sess = req.session;
    res.send(sess);
    sess.user = {};
    sess.user.name = req.body.Username;
    sess.user.password = req.body.Password;
    sess.user.status = "online";
    req.session.save();
});

您可以执行以下操作:

app.post("/Login", urlencodedParser, (req, res) => {
    let sess = req.session;
    console.log(sess);
    connection.query(
        `SELECT Username FROM users WHERE User_Password = ? AND Username = ?`,
        [req.body.Password, req.body.Username],
        function(err, results) {
            if (results.length === 0) {
                console.log(
                    "Sorry, this username/password doesn't exist in our database."
                );
            } else {
                console.log("Logined successfully!");
                sess.user = {
                    name: req.body.Username,
                    password: req.body.Password,
                    status: "online"
                };
            }
            req.session.save();
            res.render("Login");
        }
    );
});