не могу прочитать адрес электронной почты свойства undefined, когда я пытаюсь получить доступ к данным сеанса в моем приложении NodeJs - PullRequest
0 голосов
/ 03 марта 2019

В основном, когда я запускаю этот код, он показывает, что не может прочитать свойство неопределенной электронной почты.Мне нужно, чтобы этот проект работал таким образом, чтобы я мог отображать значение электронной почты со страницы входа в систему.

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;

Ответы [ 2 ]

0 голосов
/ 03 марта 2019

Я думаю, что вам нужно везде в вашем коде заменить 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);
0 голосов
/ 03 марта 2019
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}`))

Обновите ваш код, и он будет работать для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...