首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于Express + PostgreSQL的最佳会话存储中间件

用于Express + PostgreSQL的最佳会话存储中间件
EN

Stack Overflow用户
提问于 2015-04-08 04:55:37
回答 3查看 12.5K关注 0票数 12

我正在寻找生产应用程序的会话存储,因为我有错误消息:

警告: connect.session() MemoryStore不是为生产环境设计的,因为它会泄漏内存,并且不会扩展到单个进程。

我的代码:

代码语言:javascript
复制
var express              = require('express');
var ECT                  = require('ect');
var cookieParser         = require('cookie-parser');
var compress             = require('compression');
var session              = require('express-session');
var bodyParser           = require('body-parser');
var _                    = require('lodash');
var passport             = require('passport');
var expressValidator     = require('express-validator');
var connectAssets        = require('connect-assets');

app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: true }));
app.use(expressValidator());
app.use(methodOverride());
app.use(cookieParser());
app.use(session({
  resave: true,
  saveUninitialized: true,
  secret: secrets.sessionSecret,
}));
app.use(passport.initialize());
app.use(passport.session());

var app = module.exports = express();
var server = require('http').Server(app);
var io = require('socket.io')(server);

server.listen(app.get('port'), function() {
  console.log('Express server listening on port %d in %s mode',  app.get('port'), app.get('env'));
});

module.exports = app;

我不知道我的生产应用程序的最佳解决方案是什么。我在PostgreSQL中使用后缀作为ORM。如果有任何意见,我将非常感激。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-08 09:34:01

如果您只需要存储会话,则可以使用雷迪斯,如果需要持久化,也可以使用mongoDB。

票数 -5
EN

Stack Overflow用户

发布于 2019-08-21 10:07:16

虽然已经接受了一个答案,但我认为一个更详细的答案是合适的,这样那些真正想要使用Express与PostgreSQL进行一致会话存储的人就可以有一个适当的引用。

Express拥有处理会话的会话模块,尽管它默认为适合开发阶段但不适用于生产的内存中存储。

警告默认服务器端会话存储( MemoryStore )并不是为生产环境而设计的。在大多数情况下,它都会泄漏内存,不会扩展到单个进程,而是用于调试和开发。

因此,对于PostgreSQL,有一个名为连接pg简单的专用简单连接器

一旦你导入连接-pg-简单的你。需要像这样将会话导入传递给它:

代码语言:javascript
复制
const session = require('express-session')
const pgSession = require('connect-pg-simple')(session)

当您将会话添加为中间件时,必须传递它的设置

代码语言:javascript
复制
app.use(session(sessionConfig))

在您的sessionConfig中,您需要设置所有会话参数,以添加如下所示的存储选项(添加完整的选项集,但在当前情况下只需注意存储选项):

代码语言:javascript
复制
const sessionConfig = {
store: new pgSession({
    pool: sessionDBaccess,
    tableName: 'session'
}),
name: 'SID',
secret: randomString.generate({
    length: 14,
    charset: 'alphanumeric'
}),
resave: false,
saveUninitialized: true,
cookie: {
    maxAge: 1000 * 60 * 60 * 24 * 7,
    aameSite: true,
    secure: false // ENABLE ONLY ON HTTPS
}}

pgSesision的新实例有两个选项,池(用于访问PostgreSQL DB的配置设置)和表名。

DB连接设置应该如下所示:

代码语言:javascript
复制
const sessionDBaccess = new sessionPool({
user: DB_USER,
password: DB_PASS,
host: DB_HOST,
port: DB_PORT,
database: DB_NAME})

还请注意,必须启动会话池:

代码语言:javascript
复制
const sessionPool = require('pg').Pool
票数 18
EN

Stack Overflow用户

发布于 2016-10-03 08:04:39

我让它和连接-pg-简单一起工作。

使用提供的table.sql创建会话表,并传入连接字符串或对象。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29506253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档