Node.js Sequelize和express会话模型
我正在尝试让express sessions与博士后一起工作。经过几个小时的调试,除了一个问题外,我已经解决了所有的问题。除了以下几点外,一切正常: 如果我在pgAdmin中运行此查询,我的会话将正常工作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
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方面的专家。在我的项目中,如果对您有帮助的话,我将用于数据库访问,以及会话。