Javascript 我的节点和express应用程序中的错误处理中间件中没有获取req.session?
这是我在错误处理中间件中访问console.log(req.session)和req.session.isLoggedIn时得到的错误和未定义的错误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
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));