TypeError:req.flash不是函数(NodeJs)

时间:2018-07-14 12:01:06

标签: javascript node.js express npm

在站点中进行注册。对于注册表格,将使用猫鼬模型验证并尝试使用 Flash 在表格中显示错误消息。

但是结构错误

  

TypeError:res.flash不是函数       在/home/work/first-node-app/firstnode/routes/index.js:35:11

我的代码段如下

  

App.js

var createError = require('http-errors');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var logger = require('morgan');
var mongoose = require('mongoose');
var passport = require('passport');
var session = require('express-session');
var flash        = require('connect-flash');

var indexRouter = require('./routes/index');
var commonKeys = require('./config/config');


var app = express();

//connect mongoDb 
mongoose.connect('mongodb://localhost:27017/db', { useNewUrlParser: true });

// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'pug');

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')));

// required for passport session
app.use(session({
  secret: 'secrettexthere',
  saveUninitialized: true,
  resave: true,
  // using store session on MongoDB using express-session + connect  
}));
app.use(flash());
app.use(passport.initialize());
app.use(passport.session());


app.use('/', indexRouter);

module.exports = app;
  

Index.js

var express = require('express');
var router = express.Router();
var passport = require('passport');
var User = require('../models/user-model');
var Local = require('../config/passport-local');

router.get('/register', function(req, res){
  res.render('public/register',{title:'Register'});
});


router.post('/register', function(req,res,next){
  User.create({name:req.body.name, password:req.body.password, email : req.body.email}, function(err, user){
    if (err) {      
      console.log('Error Inserting New Data');

      if (err.name == 'ValidationError') {
          for (field in err.errors) {
            res.flash(field, err.errors[field].message); 
          }
          res.render('public/register');
      }
    }
    if(user) {
      res.send('user registered');
    }    
  })    
});

module.exports = router;

任何人都可以指出此代码段中的错误,这是Nodejs的新功能,并且正在尝试进行表单验证。 验证工作正常,控制台显示错误,但我无法使用Flash传递该错误。谁能帮我吗? 如果您确认我的Nodejs编码方法正确,将不胜感激

1 个答案:

答案 0 :(得分:2)

使用req.flash()代替res.flash。请参阅here以获得更多说明。