Javascript req.flash不是一个功能节点

Javascript req.flash不是一个功能节点,javascript,node.js,express,flash-message,Javascript,Node.js,Express,Flash Message,在过去的一个小时里,我一直在看这段代码,我不知道如何解决这个问题,我得到了'TypeError:req.flash不是一个函数。我试过移动app.use(flash),但还是发现了错误。我怎样才能解决这个问题 var flash = require('connect-flash'); var express = require('express'); var path = require('path'); var cookieParser = require('cookie-parser');

在过去的一个小时里,我一直在看这段代码,我不知道如何解决这个问题,我得到了
'TypeError:req.flash不是一个函数。我试过移动
app.use(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'));
});
根据,更改此项:

app.use(flash);
为此:

app.use(flash());

并且,移动你的
应用程序。使用(flash())
在其他路由定义之前,但在会话定义之后。

你用
应用程序设置的中间件。使用()
将按照声明的顺序执行,因此在你的情况下,将在会话处理之前调用flash模块。 快速浏览一下,就会发现
app.use(flash())
应该在其他与会话相关的中间件设置完成后调用,因此尝试将其向下移动一些行,这将解决您的问题

引用connect flash文档:

闪存消息存储在会话中。首先,通过启用cookieParser和会话中间件,像往常一样设置会话。然后,使用connectflash提供的flash中间件


我不是express专家,但其他所有的
应用程序都使用
该参数是调用函数的结果-例如
expressValidator()
bodyParser.json()
等更改为
app.use(flash())
,我仍然会遇到同样的错误。@julekgwa-你还必须移动
app.use(flash())在其他路由定义之前,但在会话定义之后。