簡體   English   中英

req.flash不是Nodejs的功能

[英]req.flash is not a function Nodejs

在過去的一個小時中,我一直在盯着這段代碼,但我不知道如何解決該問題,我收到的是'TypeError: req.flash is not a function 我已經嘗試過移動app.use(flash) ,但仍然出現錯誤。 我怎樣才能解決這個問題?

var flash = require('connect-flash');
var express = require('express');
var path = require('path');
var cookieParser = require('cookie-parser');
var bodyParser = require('body-parser');
var handlebars = require('express-handlebars').create({
      layoutsDir: path.join(__dirname, "views/layouts"),
      partialsDir: path.join(__dirname, "views/partials"),
      defaultLayout: 'layout',
      extname: 'handlebars'
});
var expressValidator = require('express-validator');
var session = require('express-session');
var passport = require('passport');
var localStrategy = require('passport-local').strategy;
var mongo = require('mongodb');
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/login');
var db = mongoose.connection;

// init app
var app = express();

var routes = require('./routes/index');
var users = require('./routes/users');

// view engine
app.engine('handlebars', handlebars.engine);
app.set('view engine', 'handlebars');
app.set('views', path.join(__dirname, "views"));

app.use(expressValidator());

// bodyParser Middleware
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());

// set static folder
app.use(express.static(path.join(__dirname, 'public')));
app.use('/', routes);
app.use('/users', users);

app.use(flash);

// express session
app.use(session({
    secret: 'secret',
    saveUninitialized: true,
    resave: true
}));

// passport init
app.use(passport.initialize());
app.use(passport.session());

// Global Vars
app.use(function (req, res, next) {
    res.local.success_msg = req.flash('success_msg');
    res.local.error_msg = req.flash('error_msg');
    res.local.error = req.flash('error');
    next();
});

// set Port
app.set('port', (process.env.PORT || 3000));
app.listen(app.get('port'), function () {
    console.log('Server started on port ' + app.get('port'));
});

根據文檔 ,更改此:

app.use(flash);

對此:

app.use(flash());

並且,將app.use(flash())移到其他路由定義之前,但在會話定義之后。

您使用app.use()設置的中間件將按照聲明的順序執行,因此在您的情況下,將在會話處理之前調用flash模塊。 快速瀏覽connect-flash-docs會發現app.use(flash()); 應該在設置了其他與會話相關的中間件之后調用它,因此請嘗試將其向下移動幾行,這應該可以解決您的問題。

引用connect-flash-docs:

Flash消息存儲在會話中。 首先,通過啟用cookieParser和會話中間件,照常設置會話。 然后,使用connect-flash提供的Flash中間件。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM