Javascript 我的节点和express应用程序中的错误处理中间件中没有获取req.session?

Javascript 我的节点和express应用程序中的错误处理中间件中没有获取req.session?,javascript,node.js,express,session,express-session,Javascript,Node.js,Express,Session,Express Session,这是我在错误处理中间件中访问console.log(req.session)和req.session.isLoggedIn时得到的错误和未定义的错误 cookie: { path: '/', _expires: null, originalMaxAge: null, httpOnly: true, secure: null, domain: null, sameSite: null }, csrfSecret: 'TAmB7lu

这是我在错误处理中间件中访问console.log(req.session)和req.session.isLoggedIn时得到的错误和未定义的错误

  cookie: {
    path: '/',
    _expires: null,
    originalMaxAge: null,
    httpOnly: true,
    secure: null,
    domain: null,
    sameSite: null
  },
  csrfSecret: 'TAmB7luZ3vUTFd0FWmsWoXHP',
  flash: {},
  isLoggedIn: true,
  user: {
    cart: { items: [] },
    _id: 5f1adb6163d0bc36506a6696,
    email: 'bella@gmail.com',
    password: '$2a$12$HCaoOhpMJiBEIw177tR4LuMV62a3zlnWFz4RQZYH4TPzit/vYRfn2',
    __v: 1
  }
}
undefined
TypeError: Cannot read property 'isLoggedIn' of undefined
    at D:\Node-Project\app.js:110:34
    at Layer.handle_error (D:\Node-Project\node_modules\express\lib\router\layer.js:71:5)
    at trim_prefix (D:\Node-Project\node_modules\express\lib\router\index.js:315:13)
    at D:\Node-Project\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (D:\Node-Project\node_modules\express\lib\router\index.js:335:12)
    at next (D:\Node-Project\node_modules\express\lib\router\index.js:275:10)
    at Layer.handle_error (D:\Node-Project\node_modules\express\lib\router\layer.js:67:12)
    at trim_prefix (D:\Node-Project\node_modules\express\lib\router\index.js:315:13)
    at D:\Node-Project\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (D:\Node-Project\node_modules\express\lib\router\index.js:335:12)
    at next (D:\Node-Project\node_modules\express\lib\router\index.js:275:10)
    at Layer.handle_error (D:\Node-Project\node_modules\express\lib\router\layer.js:67:12)
    at trim_prefix (D:\Node-Project\node_modules\express\lib\router\index.js:315:13)
    at D:\Node-Project\node_modules\express\lib\router\index.js:284:7
    at Function.process_params (D:\Node-Project\node_modules\express\lib\router\index.js:335:12)
    at next (D:\Node-Project\node_modules\express\lib\router\index.js:275:10)
这是我在上面遇到的错误

在上面的代码中,我正在开发一个简单的Node和express应用程序 在错误处理中间件中,我无法访问我的req.session
,但我可以通过上述中间软件访问它。我的错误处理中间件中没有会话,请帮助我如何编写不同的代码

可能是因为没有会话!!如果在会话中间件之前出现错误,它可能会立即跳转到
应用程序。使用((error,req,res,next),…)
处理程序,会话将尚未设置。您应该在错误处理程序路由中进行防御性编码,并在尝试使用它之前检查
req.session
是否存在。request.session显示为未定义,我是初学者,您能给出一些解决该错误的建议吗
    const express = require('express');
    const session = require('express-session');
    const MongoDbStore = require('connect-mongodb-session')(session);
    const csrf = require('csurf');
    const flash = require('connect-flash');
    const multer = require('multer');
    const bodyParser = require('body-parser');
    const app = express();
    const MONGODB_URI =
      '***************************************';
    const store = new MongoDbStore({
      uri: MONGODB_URI,
      collection: 'sessions',
    });
    const csrfProtection = csrf();
    const fileStorage = multer.diskStorage({
      destination: (req, file, cb) => {
        cb(null, 'images');
      },
      filename: (req, file, cb) => {
        cb(null, new Date().toISOString() + '-' + file.originalname);
      },
    });
    const fileFilter = (req, file, cb) => {
      if (
        file.mimetype === 'image/png' ||
        file.mimetype === 'image/jpg' ||
        file.mimetype === 'image/jpeg'
      ) {
        cb(null, true);
      } else {
        cb(null, false);
      }
    };
    app.set('view engine', 'ejs');
    app.set('views', 'views');
    const adminRoutes = require('./routes/admin');
    const shopRoutes = require('./routes/shop');
    const authRoutes = require('./routes/auth');
    
    const errorController = require('./controllers/errors');
    app.use(bodyParser.urlencoded({ extended: false }));
    app.use(
      multer({ storage: fileStorage, fileFilter: fileFilter }).single('image')
    );
    app.use(
      session({
        secret: 'my secret',
        resave: false,
        saveUninitialized: false,
        store: store,
      })
    );
    app.use(csrfProtection);
    app.use(flash());
    app.use((req, res, next) => {
      res.locals.isAuthenticated = req.session.isLoggedIn;
      res.locals.csrfToken = req.csrfToken();
      console.log(req.session);
      next();```
            ` ***in this middleware i can access my req.session***`
>In this middleware i can access my req.session
    ```});    
    app.use((req, res, next) => {
      if (!req.session.user) {
        return next();
      }
      User.findById(req.session.user._id)
        .then((user) => {
          if (!user) {
            return next();
          }
          req.user = user;
          next();
        })
        .catch((err) => {
          next(new Error(err));
        });
    });    
    app.use('/admin', adminRoutes);
    app.use(shopRoutes);
    app.use(authRoutes);
    app.use(express.static(path.join(__dirname, 'public')));
    app.use('/500', errorController.get500);
    app.use(errorController.get404);
    app.use((error, req, res, next) => {```
            `***in this middleware i am getting undefined on accessing req.session***`
    console.log(req.session);      ```
    res.status(500).render('500', {
            docTitle: 'Error!',
            path: '/500',
            isAuthenticated: req.session.isLoggedIn,
          });
        });
    const User = require('./models/user');
    const mongoose = require('mongoose');
    const { error } = require('console');
    mongoose
      .connect(MONGODB_URI, { useNewUrlParser: true, useUnifiedTopology: true })
      .then((result) => {
        app.listen(3000);
      })
      .catch((err) => console.log(err));