当前位置: 代码迷 >> JavaScript >> 当我尝试访问 NodeJs 应用程序中的会话数据时,无法读取未定义的属性电子邮件
  详细解决方案

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

热度:137   发布时间:2023-06-05 16:26:06.0

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

 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}`))

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

我认为您需要在代码中的任何地方用req.session.email替换session.req.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);
  相关解决方案