2012-08-25 8 views
6

Otrzymuję następujący błąd podczas korzystania z Node.js i Express. Oto moje wersje:TypeError: Object # <IncomingMessage> nie ma metody "flash"

Node : v0.8.8 
Express: 3.0.0rc3 

następujący błąd jest uzyskane podczas próby uzyskania dostępu do strony:

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

Próbowałem zdjąć app.use (app.router); z app.js bez powodzenia. Oto kod, który powoduje błąd. Zobacz linię 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; 
    } 
}); 

Oto interesująca część moich 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'))); 
}); 

Każdy pomysł, proszę? Wziąłem loof na Express'flash documentation i nie widzę, co robię źle.

Odpowiedz

6

to rozwiązać to dla mnie

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

Teraz mój paszport app.configure wygląda następująco:

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 został 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

Dzięki! Ponadto, dla osób, które chcą wiedzieć, jak korzystać z oprogramowania pośredniego connect-flash, oto przykład [Express 3] https://github.com/jaredhanson/connect-flash/blob/master/examples/express3/app. js. –

Powiązane problemy