在我的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;
答案 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消息存储在会话中。首先,通过启用cookieParser和会话中间件,照常设置会话。然后,使用connect-flash提供的Flash中间件。
按照文档说明正确使用Flash
答案 1 :(得分:0)
首先定义会话。
app.use( 会话({ 秘密:“秘密”, 重新保存:是的, saveUninitialized:true }) );
然后定义闪光灯
app.use(flash());
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);