2012-08-25 11 views
6

Recibo el siguiente error al usar Node.js y Express. Aquí están mis versiones: se obtieneTypeError: Object # <IncomingMessage> no tiene el método 'flash'

Node : v0.8.8 
Express: 3.0.0rc3 

el siguiente error al intentar acceder a la página:

TypeError: Object #<IncomingMessage> has no method 'flash' 
    at routes (/Users/nblavoie/Desktop/HotPie/HotPie/apps/authentication/routes.js:23:8) 

He tratado de eliminar el app.use (app.router); de la aplicación.js sin éxito. Aquí está el código que causa el error. Ver la línea req.flash.

app.post('/sessions', function(req, res) 
{ 
    if(req.body.user == 'piechief' 
     && req.body.password == '12345') 
    { 
     req.session.currentUser = req.body.user; 
     req.flash('info', "You're logged in as #{req.session.currentUser}"); 
     res.redirect("/login"); 
     return; 
    } 
    else 
    { 
     req.flash('error', "Those credentials were incorrect. Try again."); 
     res.redirect("/login"); 
     return; 
    } 
}); 

Aquí es la parte interesante de mis app.js:

var app = express(); 

app.configure(function(){ 
    app.set('port', process.env.PORT || 3000); 
    app.set('views', __dirname + '/views'); 
    app.set('view engine', 'jade'); 
    app.use(express.favicon()); 
    app.use(express.logger('dev')); 
    app.use(express.bodyParser()); 
    app.use(express.methodOverride()); 
    app.use(express.cookieParser()); 
    app.use(express.session({ 
    secret: "DBBD6BE563419EDB0E5CBD228E603D4AD232CE05434B4FA95C6908B64EA515C3", 
    store: new RedisStore({ 
     host: "127.0.0.1", 
     port: "6379", 
     db: "mydb" 
    }) 
    })); 
    app.use(app.router); 
    app.use(express.static(path.join(__dirname, '/public'))); 
}); 

Cualquier idea por favor? He tomado un loof en el Express'flash documentation y no puedo ver lo que estoy haciendo mal.

Respuesta

6

Esta resuelto por mí

https://github.com/jaredhanson/passport/issues/61

Ahora mi pasaporte app.configure se ve así:

app.configure(function(){ 
    app.use(express.cookieParser('keyboard cat')); 
    app.use(express.session({ cookie: { maxAge: 60000 }})); 
    app.use(passport.initialize()); 
    app.use(passport.session()); 
    app.use(flash()); 
}) 
26

req.flash ha sido removed as of 3.0:

  • req.flash() (just use sessions: req.session.messages = ['foo'] or similar)
  • connect-flash can be used as middleware to provide req.flash()
+1

Gracias! Además, para las personas que desean saber cómo usar el middleware connect-flash, aquí hay un [ejemplo de Express 3] https://github.com/jaredhanson/connect-flash/blob/master/examples/express3/app. js. –

Cuestiones relacionadas