2016-11-23 47 views
0
的NodeJS一個

功能我在此代碼爲過去一小時一直盯着,我不知道如何解決這個問題,我越來越'TypeError: req.flash is not a function。我嘗試過移動app.use(flash),但仍然出現錯誤。我怎樣才能解決這個問題?req.flash不

var flash = require('connect-flash'); 
var express = require('express'); 
var path = require('path'); 
var cookieParser = require('cookie-parser'); 
var bodyParser = require('body-parser'); 
var handlebars = require('express-handlebars').create({ 
     layoutsDir: path.join(__dirname, "views/layouts"), 
     partialsDir: path.join(__dirname, "views/partials"), 
     defaultLayout: 'layout', 
     extname: 'handlebars' 
}); 
var expressValidator = require('express-validator'); 
var session = require('express-session'); 
var passport = require('passport'); 
var localStrategy = require('passport-local').strategy; 
var mongo = require('mongodb'); 
var mongoose = require('mongoose'); 
mongoose.connect('mongodb://localhost/login'); 
var db = mongoose.connection; 

// init app 
var app = express(); 

var routes = require('./routes/index'); 
var users = require('./routes/users'); 

// view engine 
app.engine('handlebars', handlebars.engine); 
app.set('view engine', 'handlebars'); 
app.set('views', path.join(__dirname, "views")); 

app.use(expressValidator()); 

// bodyParser Middleware 
app.use(bodyParser.json()); 
app.use(bodyParser.urlencoded({ extended: false })); 
app.use(cookieParser()); 

// set static folder 
app.use(express.static(path.join(__dirname, 'public'))); 
app.use('/', routes); 
app.use('/users', users); 

app.use(flash); 

// express session 
app.use(session({ 
    secret: 'secret', 
    saveUninitialized: true, 
    resave: true 
})); 

// passport init 
app.use(passport.initialize()); 
app.use(passport.session()); 

// Global Vars 
app.use(function (req, res, next) { 
    res.local.success_msg = req.flash('success_msg'); 
    res.local.error_msg = req.flash('error_msg'); 
    res.local.error = req.flash('error'); 
    next(); 
}); 

// set Port 
app.set('port', (process.env.PORT || 3000)); 
app.listen(app.get('port'), function() { 
    console.log('Server started on port ' + app.get('port')); 
}); 
+0

我沒有明確的專家,但每隔'app.use'參數是調用函數的結果 - 例如, 'expressValidator()','bodyParser.json()'等 –

回答

2

您使用app.use()設置的中間件正按其聲明的順序執行,所以在您的情況下,flash-module將在session-handeling之前調用。 快速瀏覽到connect-flash-docs表明app.use(flash());應該叫後的其他會話相關的中間件的設置,所以嘗試移動它了一些線條,這應該解決您的問題。從連接快閃文檔

報價:

顯信息存儲在會話中。首先,像往常一樣通過啓用cookieParser和會話中間件來設置會話。然後,使用connect-flash提供的閃存中間件。

2

the documentation,改變這種:

app.use(flash); 

這樣:

app.use(flash()); 

而且,移動你的app.use(flash())是你的其他路由定義之前,但您的會話定義之後。

+0

改爲'app.use(flash())',我仍然得到相同的錯誤。 – julekgwa

+0

@julekgwa - 你還必須在你的其他路由定義之前,但在你的會話定義之後移動app.use(flash());'。 – jfriend00

相關問題