2012-04-17 26 views
21

Tôi đang cố gắng sử dụng redis cho các phiên trong ứng dụng nhanh của mình.'phiên' không xác định khi sử dụng Express/Redis cho cửa hàng phiên

tôi làm như sau:

var express = require('express'); 
var RedisStore = require('connect-redis')(express); 

app.configure('development', function(){  
    app.use(express.session({ secret: "password", 
          store: new RedisStore({ 
              host: "127.0.0.1", 
              port: "6379", 
              db: "mydb" 
             }) 
      })); 

Sau đó, trong ứng dụng của tôi, nếu tôi làm điều gì đó như:

var whatever = req.session.someProperty; 

tôi nhận được:

không thể đọc thuộc tính 'someProperty 'của undefined

Điều này cho thấy rằng req.session là undefined (Tôi có thể thấy điều này từ một mục console.log trong phần cấu hình của tôi)

Tôi đã chắc chắn có redis chạy, và có thể thấy ứng dụng của tôi kết nối với nó ban đầu (sử dụng màn hình redis-cli)

Trả lời

10

Dường như bạn đang mất tích:

app.use(express.cookieParser()); 

trước app.use(express.session(...)); cuộc gọi của bạn.

Xem here.

+0

Tôi gặp vấn đề tương tự, nhưng tôi có app.user (cookieParser()) điều – Herokiller

+1

Có cùng vấn đề ...Nhưng vẫn không hoạt động. – Siten

51

Sessions sẽ không làm việc trừ khi bạn có những 3 theo thứ tự:

app.use(express.cookieParser()); 
app.use(express.session()); 
app.use(app.router); 

Tôi không chắc chắn nếu router là bắt buộc phải sử dụng phiên, nhưng nó phá vỡ chúng nếu nó được đặt trước mặt họ.

+7

Tôi đã có app.use (app.router); trước express.session, mà dường như phá vỡ nó. – SuitedSloth

+2

câu trả lời này khó tìm, nên ở đâu đó trong tài liệu. Đã bỏ phiếu! – Voles

+0

Cảm ơn bạn, điều này cũng áp dụng cho tôi - được thăng hạng! – Kvisle

1

Tôi gặp vấn đề tương tự. Hóa ra là redis được cấu hình đơn giản đến một cổng khác.

4

Đã xảy ra sự cố tương tự, tuy nhiên nó đã được gây ra bởi những thay đổi trong phiên bản Express mới nhất.

Bây giờ bạn cần phải vượt qua tốc hành phiên với chức năng kết nối-redis xuất khẩu để mở rộng session.Store:

var express = require('express'); 
var session = require('express-session') 
var RedisStore = require('connect-redis')(session); 
3

Mọi thứ đã thay đổi gần đây với Express 3/Express 4. Vui lòng xác nhận bạn đang sử dụng phiên bản .

Khái niệm trung gian hoàn chỉnh đã thay đổi. Bạn cần cài đặt các phần mềm này bằng tay. "phiên giao dịch" là một trong các phần mềm trung gian 4.0.

Tôi khuyên bạn nên đọc

http://scotch.io/bar-talk/expressjs-4-0-new-features-and-upgrading-from-3-0https://github.com/visionmedia/express/wiki/Migrating-from-3.x-to-4.x

Bên cạnh đó một số người dùng nhầm lẫn rằng github repo bản thân được đặt tên chỉ là "phiên" nhưng

npm install express-session 

là đúng.

+1

Câu hỏi này được hỏi vào ngày 17 tháng 4 năm 2012, do đó KHÔNG liên quan đến phiên bản 4 – Alex

+0

Đối với phiên bản 4: https://stackoverflow.com/questions/31611920/session-using-nodejs-and-express-4-x-req-session- chưa xác định – SamJakob

Các vấn đề liên quan