не удается прочитать адрес электронной почты свойства undefined при попытке доступа к данным сеанса в моем приложении NodeJS

#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);