繁体   English   中英

Sequelize和快速会话模型

[英]Sequelize and express-session model

我正在尝试使用postgres进行快速会话。 经过几个小时的调试,我已经解决了所有问题,但只有一个。 一切正常,但遵循:

如果我在pgAdmin中运行此查询,我的会话可以正常工作

CREATE TABLE "sessions" (
   "sid" varchar NOT NULL COLLATE "default",
   "sess" json NOT NULL,
   "expire" timestamp(6) NOT NULL
)
WITH (OIDS=FALSE);
ALTER TABLE "sessions" ADD CONSTRAINT "session_pkey" PRIMARY KEY ("sid") 
NOT DEFERRABLE INITIALLY IMMEDIATE;

如果我用sequelize创建模型,那么它不会保存会话。 我很确定,很明显我在模型定义中缺少一些部分,并且会欣赏任何输入。

var Sessions = database.define('sessions', {
        sid: {
            type: Sequelize.STRING,
            primaryKey: true
        },
        expire: {
            type: Sequelize.DATE,
            allowNull: true
        },
        sess: Sequelize.JSON
    });
    return Sessions;

其余的代码使用它

var pgSession = require('connect-pg-simple')(expressSession),
sessionSettings = {
    store: new pgSession ({
        conString: 'postgres://' + dbConfig.user +':' + dbConfig.password+ '@' + dbConfig.host+ ':5432/' + dbConfig.database,
        tableName : 'sessions'
    }),
    secret: 'whatevergoeshere',
    resave: false,
    saveUninitialized: false,
    cookie: {
        maxAge: 7*24*60*60*1000
    }
};
app.use(expressSession(sessionSettings));

我不知道如何包含缺失的部分和sequelize文档是要么缩短主题,要么我没有足够的睡眠

其余代码可根据要求提供,但非常肯定它不会影响任何内容,因为如果我不强制与sequ​​elize模型同步并使用查询,一切正常。

此外,这是它通过pgAdmin看起来如何,顶部一个是在pgAdmin中创建的,底部是由sequelize创建的

PostgreSQL的

为了使用“connect-session-sequelize”自动生成会话表,需要在SequelizeStore实例上调用sync()方法

var session = require('express-session');
var Sequelize = require('sequelize');
var db = new Sequelize('test', 'root', '****'); 
var SequelizeStore = require('connect-session-sequelize')(session.Store);

var sessionStore = new SequelizeStore({
   db: db,
   checkExpirationInterval: 15 * 60 * 1000,
   expiration: 7 * 24 * 60 * 60 * 1000
});

app.use(session({
  secret: 'keyboard cat',
  resave: false, saveUninitialized: false,
  store: sessionStore
}));

sessionStore.sync()

Sequelize默认创建createdAt和updatedAt列,不允许为NULL。 通过使用“connect-pt-simple”模块添加行,它会无声地失败,因为它不为这两个字段提供值。 要么自己处理案例并更新这些值,要么在模型中使用属性“allowNull:true”设置这两个值,或者添加默认值。 当然,第一种选择是首选,将来可能会很方便。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM