无法设置未定义的 属性 "name"
Cannot set property "name" of undefined
所以我是 express
(以及整个后端)的新手,公平地说,我不知道如何使用 sessions
(我首先使用 cookie,然后我听说 sessions
可以更好地维护用户的状态)所以我安装了 express-session
并这样做 post 做了:
我将会话保存在一个变量中 (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");
}
);
});
我如何解决这个问题并获得我想要的结果(保持其在整个网站上记录的状态)?
代码中有几个错误。
最初,会话对象不会有 user
对象。因此 sess.user
将是 undefined
。所以第一个错误 Cannot set property "name" of undefined
是有道理的。您可能希望先将 sess.user
初始化为空对象。
有了POST
的请求,需要在req.session
上调用.save()
来保存。阅读更多相关信息 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");
}
);
});
所以我是 express
(以及整个后端)的新手,公平地说,我不知道如何使用 sessions
(我首先使用 cookie,然后我听说 sessions
可以更好地维护用户的状态)所以我安装了 express-session
并这样做 post 做了:
我将会话保存在一个变量中 (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");
}
);
});
我如何解决这个问题并获得我想要的结果(保持其在整个网站上记录的状态)?
代码中有几个错误。
最初,会话对象不会有
user
对象。因此sess.user
将是undefined
。所以第一个错误Cannot set property "name" of undefined
是有道理的。您可能希望先将sess.user
初始化为空对象。有了
POST
的请求,需要在req.session
上调用.save()
来保存。阅读更多相关信息 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");
}
);
});