Невозможно установить свойство "имя" из неопределенного - PullRequest
0 голосов
/ 25 августа 2018

Так что я новичок в express (и бэкэнде в целом) и, если честно, я не знаю точно, как использовать sessions (я сначала начал с использования куки, но потом я услышал, что sessions лучше поддерживать состояние пользователя) поэтому я установил express-session и сделал, как этот пост сделал:

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

Где я сохранил сессию в переменной (sess), а затем использовал для получения информации, но проблема в том, что кажется, что sess - это только объект cookie, а не другая информация, которую мне нужно сохранить пользовательские входы, в которых выдал мне эту ошибку:

Cannot set property "name" of undefined

Это мой код, задача которого состоит в том, чтобы зарегистрировать пользователя, сохранить данные в базе данных, а затем, когда он переходит на страницу входа, он проверяет, есть ли его входные данные в базе данных или нет, если нет, то он даст мне console.log, если существует, то он сохранит данные в сеансе, чтобы я мог поддерживать его состояние позже, но выдает мне вышеуказанную ошибку при вводе правильных входных данных:

// 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
    },
    user: {
      name: "",
      password: "",
      status: ""
    }
  })
);
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) {
  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;
      console.log("Query got excuted successfully!");
    }
  );
});

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;
        sess.user.password = req.body.Password;
        sess.user.status = "online";
      }
      res.render("Login");
    }
  );
});

Как я могу это исправить и получить желаемый результат (сохранить его состояние, зарегистрированное на всем сайте)?

1 Ответ

0 голосов
/ 25 августа 2018

В коде есть пара ошибок.

  1. Первоначально объект сеанса не имел бы user объекта.Таким образом, sess.user будет undefined.Так что первая ошибка Cannot set property "name" of undefined имеет смысл.Возможно, вы захотите инициализировать sess.user, чтобы сначала очистить объект.

  2. С запросом POST вам нужно вызвать .save() на req.session, чтобы сохранить его.Подробнее об этом здесь

Вот код, который я пробовал на моей машине:

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");
        }
    );
});
...