Javascript 如何解析req.flash不是node js中的函数

Javascript 如何解析req.flash不是node js中的函数,javascript,node.js,Javascript,Node.js,在my nodejs应用程序中,它显示了如下错误: req.flash不是一个函数 我已经安装了connection flash npm和session以及express session,但它没有安装,而是抛出了如下错误: TypeError:req.flash不是一个函数 在我的register.js的第42行。我在谷歌上搜索了好几次,但没有找到合适的解决方案。我怎样才能解决这个问题?提前谢谢 这是我的register.js: var express = require('express');

在my nodejs应用程序中,它显示了如下错误:

req.flash不是一个函数

我已经安装了connection flash npm和session以及express session,但它没有安装,而是抛出了如下错误:

TypeError:req.flash不是一个函数

在我的register.js的第42行。我在谷歌上搜索了好几次,但没有找到合适的解决方案。我怎样才能解决这个问题?提前谢谢

这是我的register.js:

var express = require('express');
var router = express.Router();
var User = require('../models/user');
var flash = require('connect-flash');
router.get('/', (req, res, next) => {
    res.render('register');
})


router.post('/', (req, res, next) => {
    var name = req.body.name;
    var username = req.body.username;
    var email = req.body.email;
    var password = req.body.password;
    var cpassword = req.body.cpassword;

    req.checkBody('name', 'Name is required').notEmpty();
    req.checkBody('username', 'User Name is required').notEmpty();
    req.checkBody('email', 'Email is required').notEmpty();
    req.checkBody('email', 'Email is not valid').isEmail();
    req.checkBody('password', 'Password is required').notEmpty();
    req.checkBody('cpassword', 'Password do not match').equals(req.body.password);

    var errors = req.validationErrors();
    if(errors){
        res.render('register', {
            errors:errors
        });
    }else{
        var newUser = new User({
            name: name,
            username: username,
            email: email,
            password: password
        });
        User.createUser(newUser, function(err, user){
            if(err) throw err;
            console.log(user)
        });

        req.flash('success_msg', 'Successfully Registered');
        res.redirect('/login');
    }
})
module.exports = router;
这是我的app.js:

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var bodyParser = require('body-parser');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var expressValidator = require('express-validator');
var passport = require("passport");
var LocalStrategy = require('passport-local').Strategy;

var session = require('session');

var flash = require('connect-flash');
var mongoose = require('mongoose');



var indexRouter = require('./routes/index');
var usersRouter = require('./routes/users');
var loginRouter = require('./routes/login');
var registerRouter = require('./routes/register');

var app = express();

app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'twig');

app.use(expressValidator());

app.use(logger('dev'));
app.use(express.json());
app.use(express.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));


app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/login', loginRouter);
app.use('/register', registerRouter);


app.use(flash());

app.use(function(req, res, next) {
    res.locals.success_msg = req.flash('success_msg');
    res.locals.error_msg = req.flash('error_msg');
    res.locals.error = req.flash('error');
    res.locals.user = req.user || null;
    next();
})

app.use(passport.initialize());
app.use(passport.session());
app.use(function(req, res, next) {
  next(createError(404));
});



app.use(function(err, req, res, next) {
  res.locals.message = err.message;
  res.locals.error = req.app.get('env') === 'development' ? err : {};

  res.status(err.status || 500);
  res.render('error');
});

module.exports = app;

您是否尝试在
app.use('/register…
)之前移动
app.use(flash())

app.use(flash());

app.use('/', indexRouter);
app.use('/users', usersRouter);
app.use('/login', loginRouter);
app.use('/register', registerRouter);
和基础

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

按照文档说明正确使用flash

  • 首先定义会话

    应用程序使用( 会议({ 秘密:“秘密”, 雷萨夫:是的, saveUninitialized:true }) ))

  • 然后定义flash

  • 应用程序使用(flash())

  • 然后定义你的路由器
  • 应用程序使用(“/”,索引路由器); app.use('/users',usersRouter)


    它解决了我所面临的同样的错误,你如何安排你的中间产品是错误的。 如果您想在路由文件中使用flash中间件,那么flash中间件应该位于路由器中间件之上。 像这样:

    app.use(flash());
    app.use('/', indexRouter);
    app.use('/users', usersRouter);
    app.use('/login', loginRouter);
    app.use('/register', registerRouter);
    

    @ShahidHussain您的会话中间件必须在路由正常运行之前添加,但是req.flash消息没有显示在我的视图中({%if success_msg%}{{success_msg}{%endif%})移动应用程序。在我的应用程序之前使用(flash())。使用('/',indexRouter);为我修复了它