2012-08-25 2 views
6

Я получаю следующую ошибку при использовании Node.js и Express. Вот мои варианты:TypeError: Object # <IncomingMessage> не имеет метода 'flash'

Node : v0.8.8 
Express: 3.0.0rc3 

Следующая ошибка, полученные при попытке получить доступ к странице:

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

Я пытался удалить app.use (app.router); из app.js без успеха. Вот код, который вызывает ошибку. См. Строку 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; 
    } 
}); 

Вот интересная часть моих 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'))); 
}); 

Любая идея, пожалуйста? Я забрал loof в Express'flash documentation, и я не вижу, что я делаю неправильно.

ответ

6

Это решило его для меня

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

Теперь мой паспорт app.configure выглядит следующим образом:

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 было 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

Спасибо! Кроме того, для людей, которые хотят знать, как использовать промежуточное программное обеспечение connect-flash, приведен пример [Express 3] https://github.com/jaredhanson/connect-flash/blob/master/examples/express3/app. JS. –

Смежные вопросы