我注意到有些项目会使用redis store和express session来保存用户会话
例如:
const session = require('express-session');
var redis = require("redis");
var redisStore = require('connect-redis')(session);
var client = redis.createClient();
var app = express();
app.use(session({
secret: 'scret',
store: new redisStore({
host: '127.0.0.1',
port: 6379,
client: client,
ttl : 7200
}),
saveUninitialized: true,
// rolling: false,
resave: true,
cookie: {
maxAge: 2 * 60 * 60 * 1000
}
}));
为什么我们需要同时使用这两个会话管理功能?
express-session
可以设置不同的“存储”来保存会话数据。
MemoryStore 随包装一起提供
express-session
。
express-session
的作者警告此默认商店。
警告默认的服务器端会话存储 MemoryStore 是 故意不为生产环境设计。会漏的 在大多数情况下,内存不会超出单个进程, 用于调试和开发。
Redis 是兼容的会话存储之一,在这种情况下被用作默认存储的“替代品”。
我正在尝试做到这一点,但我的项目正在使用 ES6 并且我遇到了问题。这是我的声明和开始方式:
import session from 'express-session';
import connectRedis from 'connect-redis';
import { createClient } from 'redis';
const app = express();
async function startServer() {
const redisURL = 'redis://localhost:6379';
const redisClient = createClient();
const RedisStore = connectRedis(session);
await redisClient.connect({ url: redisURL });
const store = new RedisStore({ redisClient });
app.use(session({
store: store ,
secret: process.env.SESSION_SECRET
resave: false,
saveUninitialized: false,
cookie: {
httpOnly: true,
path: '/',
sameSite: 'strict',
expires: new Date(Date.now() + 30 * 24 * 60 * 60 * 1000)
}
}));
}
我收到错误:D:\AI Projects\Hplayer - Copy\server\server.js:33 RedisStore = (0, _connectRedis["默认"])(_expressSession["默认"]); ^
TypeError:如果没有“new”,则无法调用类构造函数 RedisStore
有什么想法吗?