2012-08-25 26 views
6

Tôi nhận được lỗi sau trong khi sử dụng Node.js và Express. Dưới đây là phiên bản của tôi:LoạiError: Object # <IncomingMessage> không có phương thức 'flash'

Node : v0.8.8 
Express: 3.0.0rc3 

Các lỗi sau đây được lấy trong khi cố gắng truy cập vào trang:

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

tôi đã cố gắng để loại bỏ các app.use (app.router); từ app.js không thành công. Đây là mã gây ra lỗi. Xem dòng 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; 
    } 
}); 

Đây là một phần thú vị của app.js tôi:

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

Bất kỳ ý tưởng xin vui lòng? Tôi đã nhận một loof tại Express'flash documentation và tôi không thể nhìn thấy những gì tôi đang làm sai.

Trả lời

6

này giải quyết nó cho tôi

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

Bây giờ app.configure hộ chiếu của tôi trông như thế này:

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

Cảm ơn! Ngoài ra, đối với những người muốn biết cách sử dụng phần mềm trung gian kết nối flash, đây là một ví dụ [Express 3] https://github.com/jaredhanson/connect-flash/blob/master/examples/express3/app. js. –

Các vấn đề liên quan