【问题标题】:Cannot read property "name" of undefined while checking session检查会话时无法读取未定义的属性“名称”
【发布时间】:2019-01-31 20:23:03
【问题描述】:

所以我是新来表达的,我制作了某种程序,仅当您成功登录时才注册会话,然后在其他路由中使用它来应用不同的东西,具体取决于会话是否存在。

但是,问题是它给了我一个错误

Cannot read property "name" of undefined

为什么?我什至成功登录,所以会话应该存在,对吧?

这是代码:

// Importing modules/packages
let connection = require("./Connection.js");
let bodyParser = require("body-parser");
var cookieParser = require("cookie-parser");
let express = require("express");
let app = express();
var session = require("express-session");
app.use(cookieParser());
app.use(
  session({
    secret: "1E3ESS3DSS4DS4",
    saveUninitialized: true,
    resave: false,
    cookie: {
      path: "/",
      maxAge: 1000 * 60 * 60,
      httpOnly: true
    }
  })
);
let urlencodedParser = bodyParser.urlencoded({ extended: false });

// Server and routing
app.listen(3000, function() {});
app.set("view engine", "ejs");
app.get("/Signup", (req, res) => {
  res.render("Register");
});
app.get("/", function(req, res) {
  if (
    typeof req.session.user.name == "undefined" &&
    typeof req.session.user.password == "undefined"
  ) {
    res.render("Home");
  }
  res.redirect("Login");
});
app.get("/Login", function(req, res) {
  res.render("Login");
});

// Database's Connection
connection.connect(err => {
  if (err) {
    throw "ERROR! " + err;
  }
});

// Requesting and Receiving Data from body parser
app.post("/Signup", urlencodedParser, function(req, res) {
  res.render("Register");
  connection.query(
    `insert into users (Username, User_Password, Email_Address) values ("${
      req.body.Username
    }", ${req.body.Password}, "${req.body.Email}")`,
    function(err) {
      if (err) throw "An error has happened while excuting the query " + err;
    }
  );
});

app.post("/Login", urlencodedParser, (req, res) => {
  let sess = req.session;
  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 {
        sess.user = {
          name: req.body.Username,
          password: req.body.Password,
          online: true
        };
        req.session.save();
      }
      res.render("Login");
    }
  );
});

我该如何解决?

【问题讨论】:

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


    【解决方案1】:

    您必须检查整个路径是否存在,而不仅仅是最后一个属性。如果user 不是object,即使typeof 也会失败,因为它会尝试访问未定义的属性。

    app.get("/", function(req, res) {
      if (
        typeof req.session.user != "object" || (
        typeof req.session.user.name == "undefined" &&
        typeof req.session.user.password == "undefined")
      ) {
        res.render("Home");
      }
      res.redirect("Login");
    });
    

    【讨论】:

    • 成功了,谢谢!!或者,我只是做了 typeof req.session.user != "undefined" 这样我就不必写所有这些了。
    猜你喜欢
    • 2018-08-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 2022-01-22
    • 2021-11-13
    相关资源
    最近更新 更多