如何解决req.flash不是节点js中的功能

时间:2018-11-06 06:58:18

标签: javascript node.js

在我的nodejs应用中,它显示如下错误:

  

req.flash不是功能

我已经安装了连接闪存npm以及会话和express-session,但是相反,它会抛出类似以下的错误:

  

TypeError:req.flash不是函数

第行中的

在我的register.js中为42。我用谷歌搜索了几次,但是没有找到合适的解决方案。我该如何解决?预先感谢。

这是我的register.js:

exec

这是我的app.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;

3 个答案:

答案 0 :(得分:2)

您是否尝试将app.use(flash())移到app.use('/register...之前?

app.use(flash());

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

flash-connection documnet

的基数
  

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

按照文档说明正确使用Flash

答案 1 :(得分:0)

  1. 首先定义会话。

    app.use( 会话({ 秘密:“秘密”, 重新保存:是的, saveUninitialized:true }) );

  2. 然后定义闪光灯

app.use(flash());

  1. 然后定义您的路由器

app.use('/',indexRouter); app.use('/ users',usersRouter);

它解决了我面临的相同错误

答案 2 :(得分:0)

你安排中间件的方式是错误的。 如果你想在你的路由文件中使用 flash 中间件,那么 flash 中间件应该在你的路由器中间件之上。 像这样:

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