Home Articles

req.session是未定义的快递会话

Asked
Viewed 325 times
0

我知道这个问题已被问过好几次了 . 但是,我读过的答案都没有解决我的问题 .

其中许多已经过时用于快递v4,因为快递 Session 目前是一个单独的模块 . 那些问题/答案在这里:

其他问题已更新,但是给出的解决方案并不能解决我的问题 . 那些问题/答案在这里:

大多数解决方案是配置应用程序时的中间件序列 . 我尝试了不同的选项,但我找不到正确的方法 . 也许就是这样 .

在其他解决方案中,有人说无法调用 session 中间件,因为如果是,则会定义 req.session . 我在 app.use(session({...})) 之后使用过中间件,并检查两者是否被调用 .

我也发现this issue有人说当商店断开连接时,他得到 req.session 未定义 . 到目前为止我正在使用默认商店 . 这可能是问题吗?

我收到这个错误:

TypeError:无法读取undefined的属性'destroy'

当我尝试在login.js中使用 req.session.destroy() 注销会话时它会中断(请参阅下面的代码)

我的代码

server.js

const express = require('express');
const session = require('express-session');
const mongo = require('mongodb');
const passport = require('passport');
const path = require('path');
const routes = require('./app/routes');
const login = require('./app/routes/login.js');

const app = express();
app.use(session({
  secret: 'key',
  resave: false,
  saveUninitialized: true,
}));
app.use(passport.initialize());
app.use(passport.session());
app.use('/public', express.static(path.normalize('./public')));
app.use(routes);
app.use(login);
app.set('view engine', 'pug');

const MongoClient = mongo.MongoClient;
MongoClient.connect('mongodb://localhost:27017/myapp')
.then((db) => {
  // Link the database through the app. It will be available in the req.app object
  app.db = db;
  console.log('App listening on port ' + process.env.PORT);
  app.listen(process.env.PORT);
})
.catch((err) => {
  console.log('There was an error connecting to the database.');
  console.log(err);
});

module.exports = app; // For testing

login.js

const express = require('express');
const passport = require('passport');
const router = new express.Router();

// Other login logic here

router.get('/logout', (res, req) => {
  req.session.destroy((err) => {
    req.redirect('/');
  });
});

module.exports = router;

1 Answer

  • 5

    您在处理程序中交换了 reqres 参数:

    router.get('/logout', (res, req) => { ... })
    

    那应该是另一种方式:

    router.get('/logout', (req, res) => { ... })
    

Related