2012-08-25 9 views
6

Ich bekomme den folgenden Fehler bei der Verwendung von Node.js und Express. Hier sind meine Ausführungen:TypeError: Objekt # <IncomingMessage> hat keine Methode 'Flash'

Node : v0.8.8 
Express: 3.0.0rc3 

Der folgende Fehler wird erhalten bei dem Versuch, auf die Seite zuzugreifen:

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

Ich habe versucht, die app.use (app.router) zu entfernen; aus der app.js ohne Erfolg. Hier ist der Code, der den Fehler verursacht. Siehe entsprechende Zeile.

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; 
    } 
}); 

Hier ist der interessante Teil meiner 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'))); 
}); 

Jede Idee, bitte? Ich habe einen Loof an der Express'flash documentation genommen und ich kann nicht sehen, was ich falsch mache.

Antwort

6

Dies löst es für mich

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

nun wie folgt aus meinem Pass app.configure aussieht:

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 hat removed as of 3.0 gewesen:

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

Dank! Für die Leute, die wissen möchten, wie man die connect-flash-Middleware benutzt, gibt es hier ein Beispiel [Express 3] https://github.com/jaredhanson/connect-flash/blob/master/examples/express3/app. js. –

Verwandte Themen