Node.js Sequelize和express会话模型

Node.js Sequelize和express会话模型,node.js,postgresql,session,express,Node.js,Postgresql,Session,Express,我正在尝试让express sessions与博士后一起工作。经过几个小时的调试,除了一个问题外,我已经解决了所有的问题。除了以下几点外,一切正常: 如果我在pgAdmin中运行此查询,我的会话将正常工作 CREATE TABLE "sessions" ( "sid" varchar NOT NULL COLLATE "default", "sess" json NOT NULL, "expire" timestamp(6) NOT NULL ) WITH (OIDS=FALS

我正在尝试让express sessions与博士后一起工作。经过几个小时的调试,除了一个问题外,我已经解决了所有的问题。除了以下几点外,一切正常:

如果我在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模型同步并使用查询,一切都会正常工作

另外,下面是它在pgAdmin中的外观,顶部是通过pgAdmin中的查询创建的,底部是通过sequelize创建的


Sequelize在默认情况下创建createdAt和updatedAt列,不允许为空。通过使用模块“connect pt simple”添加行,它会自动失败,因为它没有为这两个字段提供值。 您可以自己处理该情况并更新这些值,或者在您的模型中使用属性“allowNull:true”设置这两个值,或者添加一个默认值。
当然,首选第一个选项,将来可能会很方便。

为了使用“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方面的专家。在我的项目中,如果对您有帮助的话,我将用于数据库访问,以及会话。