2015-11-28 17 views
5

私はpostgresで作業するためにエクスプレスセッションを取得しようとしています。数時間のデバッグの後、問題のすべてを解決しました。すべてはなく、次のように動作します:私はpgAdminで内部でこのクエリを実行する場合Sequelizeとexpress-sessionモデル

私のセッションは、私がsequelizeでモデルを作成する場合、それがセッションを保存しません

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; 

正しく動作します。私は確信しているし、私はモデル定義にいくつかの部分が欠けていることは明らかであり、すべての入力を感謝します。コードの

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

残りは私がどのように足りない部分を含めるには考えているとsequelize文書が話題に短いのいずれかにあるか、私は十分な睡眠を持っていなかったこの

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)); 

での作業します

その他のコードは要望に応じて利用できますが、私がモデルを続行して強制的に強制してクエリを使用しないと、何も影響を受けません。

また、ここでは下の1がsequelize

PostgreSQL

+0

続ける](https://github.com/mweibel/connect-session-sequelize)? –

+0

私の質問があなたのコメントを反映するように更新しました –

+0

同じ問題が発生した別のプロジェクトのソースコードで更新されました。 –

答えて

1

Sequelizeは、デフォルトでcreatedAtとupdatedAt列を作成しているによって作成され、トップ1は、pgAdminで、クエリを使用して作成され、それはpgAdminでを通じてどのように見えるかですNULLにすることはできません。モジュール "connect-pt-simple"を使用して行を追加すると、これらの2つのフィールドの値が提供されないため、自動的に失敗します。 自分でケースを処理してこれらの値を更新するか、モデルでこれらの2つをプロパティ "allowNull:true"で設定するか、デフォルト値を追加します。 もちろん、最初のオプションが優先され、将来的には便利かもしれません。

1

「接続セッション-sequelize」とのセッションテーブルを自動生成することためには、あなたが(同期を起動する必要があります)あなただけの[接続-セッション - 使用していないのはなぜSequelizeStoreインスタンス上のメソッド

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() 
関連する問題