1

我遇到了 connect-flash ,除非我刷新几次,否则所有 Flash 消息都不会加载到页面上,我不知道为什么。

我创建了一个小项目来测试connect-flash,结果是一样的,请检查下面的代码:

App.js 代码:

const express = require('express');
const path = require('path');
const favicon = require('serve-favicon');
const logger = require('morgan');
const cookieParser = require('cookie-parser');
const bodyParser = require('body-parser');
const session = require('express-session');
const flash = require('connect-flash');
const app = express();
// view engine setup
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'hbs');
app.use(logger('dev'));
app.use(bodyParser.json());
app.use(bodyParser.urlencoded({ extended: false }));
app.use(cookieParser());
app.use(express.static(path.join(__dirname, 'public')));
app.use(session({
 secret: 'keyboard cat',
 resave: false,
 saveUninitialized: true
}));
//using flash
app.use(flash());
app.use(function(req, res, next){
 res.locals.success = req.flash('success');
 res.locals.error = req.flash('error');
 next();
});
//flash route
app.get('/flash', (req, res) =>{
 req.flash("success", "CONNECT FLASH TEST");
 res.render('flash');
});
const port = process.env.PORT || 5000;
app.listen(port, () =>{
 console.log(`App has started on port ${port}`);
})

这是 flash.hbs 页面呈现 flash 消息的代码:

<h1>Flash page</h1>
{‌{#if success}}
<h2>{‌{success}}</h2>
{‌{/if}}

非常感谢,任何帮助将不胜感激。

4

2 回答 2

2

它们是否仅在一次刷新后呈现?这就是他们应该如何工作。

“Flash 消息”用于将消息传递到下一个请求,大多数情况下唯一的原因是post-request-get 模式。如果您只想在同一页面上向用户显示消息,而不进行重定向,则不需要库。只需将消息作为数据传递给模板。

于 2018-04-28T11:44:15.470 回答
0

当我浏览文档并遇到这个 gemreq.flash时,我正在滚动我自己的新版本的中途:express-session

注意 从 1.5.0 版开始,不再需要使用 cookie-parser 中间件来使该模块工作。该模块现在直接在 req/res 上读取和写入 cookie。如果此模块和 cookie-parser 之间的 secret 不同,使用 cookie-parser 可能会导致问题。

瞧,我有这些台词:

app.use(require('cookie-parser')())
const session = require('express-session')
const MongoStore = require('connect-mongo')(session)
app.use(session({
  secret: process.env.SESSION_STORE_SECRET,
  store: new MongoStore({mongooseConnection: mongoose.connection}),
  maxAge: 10*365*24*60*60*1000, // set to 10 years
  resave: false,
  saveUninitialized: false
}))

一旦我将cookie-parser行更改为:

app.use(require('cookie-parser')(process.env.SESSION_STORE_SECRET))`

它完全按预期工作!

(对于某些人来说,答案将是cookie-parser完全删除。)

于 2019-10-09T04:40:46.967 回答