当我尝试在我的 NodeJs 应用程序中访问会话数据时,无法读取未定义的属性电子邮件



基本上,当我运行此代码时,它显示它无法读取未定义电子邮件的属性。我需要这个项目以这样一种方式工作,以便我能够从登录页面显示电子邮件值。

var express = require('express');
var session = require('express-session');
var bodyParser = require('body-parser');
var app = express();
app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);
app.use(session({secret: 'ssshhhhh'}));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: true}));
// accept url encoded
app.use(bodyParser.urlencoded({
extended: true
}));
// accept json
app.use(bodyParser.json());
var urlencodedParser = bodyParser.urlencoded({ extended: false })
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}));
var router=express.Router();
router.get('/',function (req,res) {
if(!session.req.email){
res.send('email not set');
} else{
res.send('welcome'+session.req.email+': We love you');
}
});
router.get('/login',function (req,res) {
res.render('login');
});
router.post('/login',urlencodedParser,function (req,res) {
console.log(req.body)
session.req.email=req.body.email;
session.req.email=req.body.email;
});
app.use(router);
module.exports = router;

var express = require('express');
var session = require('express-session');
var bodyParser = require('body-parser');
var app = express();
var path = require('path');
const port = 8000;
app.set('port', process.env.port || port);
app.set('views', path.join(__dirname, '/views'))
app.set('view_engine', 'ejs');
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());
app.use(express.static(path.join(__dirname, "public")));
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}));

app.get('/', function (req, res) {
if (!req.session.email) {
res.send('email not set');
} else {
res.send('welcome' + req.session.email + ': We love you');
}
});
app.get('/login', function (req, res) {
res.render('login');
});
app.post('/login', function (req, res) {
console.log(req.body)
req.session.email = req.body.email;
req.session.email = req.body.email;
});
app.listen(port, console.log(`Server is running on port ${port}`))

更新您的代码,它将为您工作。

我认为您需要在代码中的任何地方将session.req.email替换为用户会话实际附加到他的请求req.session.email

您的代码有许多重复项,另请注意,如果您使用 ajax 提交表单,则需要提供适合您提供的序列化数据的标头内容类型,例如:

1- 作为JSON

fetch("/login", {
method: "POST", 
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({email:"digital.flowers@hotmail.com"})
})

2- 作为编码网址

fetch("/login", {
method: "POST", 
headers: {
"Content-Type": "application/x-www-form-urlencoded",
},
body: "email=digital.flowers@hotmail.com"
})

这是经过一些清理后代码的最终形式,代码经过测试,它对我有用:

const http = require("http");
const express = require('express');
const session = require('express-session');
const bodyParser = require('body-parser');
const app = express();
app.set('views', __dirname + '/views');
app.engine('html', require('ejs').renderFile);
// parsers
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({extended: false}));
//app.use(cookieParser);
app.use(session({
secret: 'keyboard cat',
resave: false,
saveUninitialized: true
}));
// router
const router = express.Router();
router.get('/', function (req, res) {
if (!req.session.email) {
res.send('email not set');
} else {
res.send('welcome' + req.session.email + ': We love you');
}
});
router.get('/login', function (req, res) {
res.render('login');
});
router.post('/login', function (req, res) {
console.log(req.body);
req.session.email = req.body.email;
res.send("ok");
});
app.use(router);
// server
const server = http.createServer(app);
server.listen(3000);

最新更新