2011-11-10 5 views
0

J'essaie d'utiliser les sessions dans Express. J'ai lu les documents aussi attentivement que possible, mais je n'ai pas pu trouver de différences entre mon code et les exemples - néanmoins, les sessions ne semblent pas s'initialiser.Les sessions dans Express ne fonctionnent pas

est ici le début de mes app.js

var express = require('express') 
    , routes = require('./routes') 
    , customRoutes = require('./routes/custom.js'); 

var app = module.exports = express.createServer(); 

// Configuration 

app.configure(function(){ 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(app.router); 
    app.use(express.static(__dirname + '/public')); 

    app.use(express.cookieParser()); 
    app.use(express.session({ secret: "keyboard cat" })); 

}); 

app.configure('development', function(){ 
    app.use(express.errorHandler({ dumpExceptions: true, showStack: true })); 
}); 

app.configure('production', function(){ 
    app.use(express.errorHandler()); 
}); 

// Routes 

app.get('/', function(req, res){ 

    req.session.something = "please?"; 
    req.session.boo = true; 
    req.session.int = 100; 

    console.log(req.session); // undefined 
}); 

Et quand je le lance: TypeError: Impossible de définir la propriété « quelque chose » de non définie.

Que vérifier?

$ npm ls 

ââ⬠[email protected] 
â âââ [email protected] 
â ââ⬠[email protected] 
â âââ [email protected] 
ââ⬠[email protected] 
â âââ [email protected] 
â âââ [email protected] 
â âââ [email protected] 
â âââ [email protected] 
âââ [email protected] 
+0

S'il vous plaît, changez le nom de la question en quelque chose de significatif. – sorin

Répondre

5

Vous n'avez pas spécifié un magasin de session, consultez l'exemple d'ici: https://github.com/alessioalex/Nodetuts/blob/master/express_samples/app.js#L15-31

Par exemple spécifier le magasin de mémoire (ce qui est ok seulement pour le développement):

var MemStore = express.session.MemoryStore; 
... 
app.use(express.session({secret: 'secret_key', store: MemStore({ 
    reapInterval: 60000 * 10 
})})); 
+0

Merci, cela a fait l'affaire. – Apeli

+0

L'utilisation de la mémoire pour la production n'est pas acceptable? –

+3

Ce n'est pas correct car le processus meurt et redémarre, il perd toutes les données de session (qui sont contenues dans ce processus). Vous devriez utiliser un magasin Redis ou un magasin MongoDB: https://github.com/visionmedia/connect-redis et https://github.com/kcbanner/connect-mongo – alessioalex

Questions connexes