2016-11-23 3 views
0

지난 한 시간 동안이 코드를 봤는데 문제를 해결하는 방법을 모르겠습니다. 'TypeError: req.flash is not a function입니다. 나는 주위에 app.use(flash) 이동 시도하고 여전히 오류가 있어요. 이 문제를 어떻게 해결할 수 있습니까? 다른 경로를 정의하기 전에로 당신의 app.use(flash())을 이동하지만, 세션 정의 후,req.flash가 함수가 아닙니다. Nodejs

app.use(flash()); 

을 그리고이에

app.use(flash); 

을 : the documentation

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()으로 설정 한 미들웨어가 선언 된 순서대로 실행되고 있으므로, 귀하의 경우에는 플래시 모듈이 세션 처리 전에 호출됩니다. connect-flash-docs을 잠시 들여다 보면 다른 세션 관련 미들웨어를 설치 한 후에 app.use(flash());을 호출해야하므로 문제를 해결할 수 있도록 몇 줄 아래로 이동해보십시오. 연결-플래시 문서에서

인용구 :

플래시 메시지는 세션에 저장됩니다. 먼저 cookieParser 및 세션 미들웨어를 활성화하여 평소와 같이 세션을 설정합니다. 그런 다음 connect-flash에서 제공하는 플래시 미들웨어를 사용하십시오.

2

이 변경.

+0

이'app.use (flash()) '로 변경되었고 여전히 같은 오류가 발생합니다. – julekgwa

+0

@julekgwa - 다른 경로 정의보다 먼저 app.use (flash());를 이동해야하지만 세션 정의 이후에 이동해야합니다. – jfriend00

관련 문제