首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Sequelize和速成会话模型

问Sequelize和速成会话模型
EN

Stack Overflow用户
提问于 2015-11-28 12:48:37
回答 2查看 7.2K关注 0票数 8

我在试着让快递和postgres一起工作。经过几个小时的调试,我修复了所有的问题,只有一个。一切正常,但如下所示:

如果在pgAdmin中运行此查询,则会话将正确工作。

代码语言:javascript
复制
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;

如果我创建带有后缀的模型,那么它不会保存会话。我确信,很明显,我在我的模型定义中遗漏了一些部分,并希望得到任何输入。

代码语言:javascript
复制
var Sessions = database.define('sessions', {
        sid: {
            type: Sequelize.STRING,
            primaryKey: true
        },
        expire: {
            type: Sequelize.DATE,
            allowNull: true
        },
        sess: Sequelize.JSON
    });
    return Sessions;

下面的代码的其余部分

代码语言:javascript
复制
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));

我不知道如何包括缺少的部分和后缀文档要么是简短的主题,要么我没有足够的睡眠

其余的代码可以在请求时使用,但是非常肯定它不会影响任何东西,因为如果我不强制与后缀模型同步并使用查询,那么一切都会正常工作。

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

​

​

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-01-11 09:38:15

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

票数 1
EN

Stack Overflow用户

发布于 2016-06-03 18:02:16

为了自动生成具有“连接-会话-续集”的会话表,需要在SequelizeStore实例上调用sync()方法。

代码语言:javascript
复制
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()
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33971478

复制
相关文章

相似问题

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