Problembeschreibung: Bei der Bearbeitung des Formulars mit express session
实现一个登录页面,当使用app.post
die Aussage
if(req.body.password!=user[req.body.user].password||!user[req.body.user])
Unter diesen ist der json
Dateiinhalt:
{
"baidu":{
"password":"123",
"name":"百度"
}
}
Es tritt ein Problem auf, die spezifischen Erscheinungsformen sind:
Der Benutzername und das Passwort werden in einer json
文件中,在app.js
-Datei abgelegt und darin verarbeitet
TypeError: Cannot read property 'password' of undefined
overflow
Ich habe die Informationen überprüft und konsultiert, aber keine eindeutige Antwort erhalten. Gibt es im Forum einen Experten auf diesem Gebiet, der einige Lösungen anbieten kann?
app.js
Das Folgende ist der Code von
var express = require('express');
var user = require('./user');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var multer = require('multer');
var session = require('express-session');
var path = require('path');
var app = express();
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
app.use(cookieParser());
app.use(session({
secret: 'baiduApp',
cookie: {maxAge: 60 * 1000 * 30},
resave: true,
saveUninitialized: false
}));
app.get('/', function (req, res) {
if (req.session.sign) {
console.log(req.session);
res.render('sign', {session: req.session})
} else {
res.render('index', {title: 'index'})
}
});
app.get('/out', function (req, res) {
req.session.destroy();
res.redirect('/');
});
app.post('/sign', function (req, res) {
//登录的数据和user.json中的数据进行对比
if (req.body.password != user[req.body.user].password || !user[req.body.user]) {
res.end('sign failure');
} else {
req.session.sign = true;
req.session.name = user[req.body.user].name;
res.send('welecome <strong>' + req.session.name + '</strong>,<a href="/out">登出</a>');
}
});
app.listen(80);
这里的判断,写反了吧
应该是:
首先得判断json里面有没有
req.body.user
这个属性。我找到了解决这个问题的另一种方案:
应该先判断是否有账户,否则将得到
cannot read property password of undefined
错误:结合之前的反向思路,两种方案都可以很好地解决此问题。