Я думаю, что вам нужно везде в вашем коде заменить session.req.email
на req.session.email
, когда пользовательский сеанс фактически прикреплен к его запросу.
В вашем коде много дубликатов, также, пожалуйста, обратите внимание, если вы отправляете формуиспользуя ajax, вы должны предоставить тип содержимого заголовка, который подходит для данных сериализации, которые вы предоставляете, например:
1- as JSON
fetch("/login", {
method: "POST",
headers: {
"Content-Type": "application/json",
},
body: JSON.stringify({email:"digital.flowers@hotmail.com"})
})
или
2- как закодированный URL
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);