【问题标题】:TypeError: req.flash is not a function (NodeJs)TypeError:req.flash 不是函数(NodeJs)
【发布时间】:2018-07-14 20:40:36
【问题描述】:

在站点中使用注册。对于注册表单,验证是使用猫鼬模型完成的,并尝试使用 Flash 在表单中显示错误消息。

但是结构在这个错误

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

我的代码 sn-ps 如下

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;

索引.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;

任何人都可以指出此代码 sn-ps 中的错误,因为我是 Nodejs 的新手并正在尝试进行表单验证。 验证工作正常,控制台显示错误,但我无法使用 flash 传递该错误。任何人都可以帮助我吗? 如果您确认我编写 Nodejs 代码的方法是正确的,我们将不胜感激

【问题讨论】:

  • 你是否安装了所需的包
  • 是的,我确实安装了connect-flash flash req-flash

标签: javascript node.js express npm


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2018-05-03
    • 2020-07-12
    • 2020-07-14
    • 2017-11-22
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-13
    相关资源
    最近更新 更多