javascript - 如何解决 req.flash 不是节点 js 中的函数
问题描述
在我的 nodejs 应用程序中,它显示如下错误:
req.flash 不是函数
我已经安装了 connection-flash npm 和 session 和 express-session 但它不是这样抛出错误:
类型错误:req.flash 不是函数
行号 42 在我的 register.js 中。我用谷歌搜索了几次,但没有找到任何合适的解决方案。我该如何解决这个问题?提前致谢。
这是我的 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(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 中间件。
按照文档说明正确使用闪光灯
推荐阅读
- ios - IOS Swift如何突出显示选定的图像
- php - laravel 超过日期和 from_dates 和 to_date 之间如何写逻辑
- javascript - TypeError: undefined is not an object (评估 this.getActiveTab().barColor)
- mysql - SQL 获取每日注册用户总数
- angular - Angular 6:我想禁用侧边栏的所有以下选项并在本地存储条件下启用上述选项
- c# - 有没有另一种方法来编写一个从 LINQ 中选择一个的循环?
- javascript - 摩根的Node Js TypeError:app.use不是函数
- r - r 行乘法和行和
- .net-core - ASP.NET Core 和 Angular - SSR
- java - 替代没有未使用变量的静态块