2016-11-16 7 views
2

私はNodeJSとExpressJSを初めて使用しており、MySQLデータストアとのセッション機能を設定しようとしています。私はそれを呼び出す方法についてはドキュメントを守ってきましたが、コマンドを実行した後、req.sessionは定義されていません。私は、クッキーとセッションをインスタンス化するときに、MySQLデータベースへのアクティブな接続と一般的なクッキーの秘密があることを確認しました。私はMySQLデータストアでExpressJSセッションが動作しない

端子$をクリア...すべてのエラーを取得しますが、ここでは、コンソールのデバッグ出力されていないよ。DEBUG =表現-mysqlのセッション*のNPMは

[email protected]スタートを開始しますnode_app

ノード./bin/www

GET /ログイン200 7.458ミリ秒 - 249の

急行-mysqlのセッション:+ 0msと

をセッションストアを作成するログ900000ms + 7MS

エクスプレス - :有効期限の間隔を設定するログ: - :

急行-mysqlのセッションは47の

急行-mysqlのセッション+ 3msの

POST/200 40.744ミリ秒、ログインのデフォルトオプションの設定ログMySQLのセッション:ログのクリアの有効期間+ 0ms`

これを実行しているとき、私はデバッグを有効にしようとした

...

var pool = mysql.createPool(options);

と、セッションテーブルにセッションを追加しようとしてもクエリが表示されませんでした。

私のmain.jsファイルに という私のアプリケーションフローがあります。私はすべての要求を一番上に捕らえて、有効なセッションを確認します。見つからなければ、ログインフォームを表示します。

app.get('/*',function(req, res){ 
if (!req.session) { 
    var login = require('../js/login_functions'); 
    res.send(login.getLoginForm()); 
}}); 

私は、ユーザー名/パスワードが検証されていることを確認してから、私はsession.js必要なファイルとのセッションを作成/ログインにログインフォーム投稿。私は上記の下部にはconsole.log(req.session)を実行すると、ここでコードはsession.js

var config = require('../admin/config'); 
var express = require('express'); 
var app = module.exports = express(); 
var db = require('../js/database'); 
var session = require('express-session'); 
var MySQLStore = require('express-mysql-session')(session); 

module.exports = { 
    createSession: function(req, callback){ 
     db.getConnection(function(connection){   
      var session_store_options = { 
       checkExpirationInterval: 900000,// How frequently expired sessions will be cleared; milliseconds. 
       expiration: config.SESS_MAX_AGE,// 10 hours session expiration 
       createDatabaseTable: false, 
       connectionLimit: config.DB_CONNECTION_LIMIT, 
       schema: { 
        tableName: config.SESS_TABLE_NAME, 
        columnNames: { 
         session_id: 'session_id', 
         expires: 'expires', 
         data: 'user_data' 
        } 
       } 
      }; 

      var session_options = { 
       key: config.SESS_COOKIE_NAME, 
       secret: config.SESS_SECRET, 
       store: new MySQLStore(session_store_options, connection), 
       cookie: { maxAge: config.SESS_MAX_AGE }, 
       genid: function(req) { 
        return genuuid() // use UUID for session ID 
       }, 
       rolling: true, 
       resave: false, 
       saveUninitialized: false, 
      }; 

      if(config.ENV.toLowerCase() === 'prod'){ 
       session_options.cookie.secure = true; 
      } 
      app.use(session(session_options)); 
      if(config.DEBUG){ 
       console.log(req.session); 
      } 
      callback(session); 
     }); 
    } 
}; 

、それは未定義出力します。クッキーとdbストアのセッションを呼び出すステップがありませんか?

答えて

0

私はセッションが呼び出されていなかったことが判明し、私は手動でこの

app.use(session(session_options)); 
のではなく、この

sess = session_(session_options); 
sess(req, res, function(err){ if(err) console.log('error:', err); }); 
app.use(sess); 

のようなセッションの呼び出しを分割することによってそれを呼び出すために必要な

関連する問題