Simple Node/Express应用程序无法识别会话存储

qar*_*dso 4 javascript session redis express express-session

我有一个非常小的快递应用程序来说明我遇到的问题.

我在我的快递应用程序上使用connect-redis作为会话存储.我有一个问题,只是连接到它.只需打印出req.session.store结果undefined如下所示:

const session = require('express-session')
const app = require('express')()
const RedisStore = require('connect-redis')(session);

const isDev = process.env.NODE_ENV !== 'production'

app.use(session({
  store: new RedisStore({
    host: 'localhost',
    port: 6379
  }),
  secret: 'super-secret-key', // TBD: grab from env
  resave: false,
  saveUninitialized: false,
  cookie: {
    maxAge: 1000 * 60 * 60 * 24,
    secure: !isDev, // require HTTPS in production
  }
}))

app.get('/', (req, res) => {
  console.log('**testing**')
  console.log(req.session.store)
  res.send('rendering this text')
})

app.listen(3001, () => {
  console.log('listening on 3001')
})
Run Code Online (Sandbox Code Playgroud)

这个输出是:

listening on 3001
**testing**
undefined
Run Code Online (Sandbox Code Playgroud)

store酒店,除了当前和方法之外,我还尝试通过url酒店和client酒店进行连接.hostport

我没有看到任何错误,所以我不确定为什么store总是未定义.

我错过了什么?

另外,我确实开始使用redis redis-server,我可以通过其他客户端连接到它


更新1
此外,我确实看到了一些有用的StackOverflow.问题是,从版本1.5>来看express-session,它表示你不需要cookie-parser模块,所以我不相信这是问题所在.

Ade*_*eer 7

req.session只会拥有设置为会话的属性,您从未设置名为的会话属性store.下面是工作RedisStore会话的示例代码

const express = require('express');
const app = express();
const session = require('express-session');
const RedisStore = require('connect-redis')(session);

const redis = require('redis');
const client = redis.createClient({
  host: '127.0.0.1', 
  port: 6379
});
client.on('error', function (err) {
  console.log('could not establish a connection with redis. ' + err);
});
client.on('connect', function (err) {
  console.log('connected to redis successfully');
});

app.use(session({
  store: new RedisStore({client: client}),
  secret: 'super-secret-key',
  resave: true,
  saveUninitialized: true,
  cookie: {
    ttl: 30 * 10000,
    httpOnly: true,
    secure: false
  }
}));

app.get('/', (req, res) => {
  client.get('user', (err, data) => {
    console.log('data in redis:', data)
  });
  res.status(200).send('OK');
});

app.get('/login', (req, res) => {
  if (req.session.user) {
    res.redirect('/')
  } else {
    client.set('user', JSON.stringify({username: 'Adeeb'}))
  }
  res.send('login');
})

app.get('/logout', (req, res) => {
  req.session.destroy();
  res.send('logout');
});

app.listen(3001, () => {
  console.log('server running on port 3001')
})
Run Code Online (Sandbox Code Playgroud)