#javascript #node.js #session
#javascript #node.js #сеанс
Вопрос:
В принципе, когда я запускаю этот код, он показывает, что не может прочитать свойство из undefined email. Мне нужно, чтобы этот проект работал таким образом, чтобы я мог отображать значение электронной почты со страницы входа в систему.
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;
Комментарии:
1. Вы должны опубликовать код внутри своего вопроса, чтобы невозможно было узнать, что вы сделали. Пожалуйста, отредактируйте свой вопрос и добавьте код, который вызывает у вас проблемы.
2. Я сделал именно это. Пожалуйста, проверьте еще раз и посмотрите, сможете ли вы мне помочь.
Ответ №1:
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}`))
Обновите свой код, и он будет работать на вас.
Комментарии:
1. можете ли вы обновить свой код, который является избыточным, чтобы его было легко понять
Ответ №2:
Я думаю, вам нужно везде в вашем коде заменить 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 — как закодированный 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);