我遇到连接闪存问题,所有闪存消息都没有加载到页面上,除非我刷新了几次我不知道为什么。
我创建了一个小项目来测试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消息的flash.hbs页面的代码:
<h1>Flash page</h1>
{{#if success}}
<h2>{{success}}</h2>
{{/if}}
非常感谢先进,任何帮助都会受到高度赞赏。
答案 0 :(得分:1)
一次刷新后它们会渲染吗?那是他们应该如何运作的。
&#34; Flash消息&#34;用于将消息传递到下一个请求,大多数情况下唯一的原因是post-request-get pattern。如果您只想在同一页面上向用户显示消息,而不进行重定向,则不需要为其提供库。只需将消息作为数据传递给模板。
答案 1 :(得分:0)
当我浏览the docs of express-session
并遇到以下问题时,我正在滚动自己的新版本req.flash
的一半:
注意从版本1.5.0开始,该模块不再需要使用cookie解析器中间件。现在,此模块直接在req / res上读写cookie。如果此模块与Cookie解析器之间的秘密不同,则使用cookie解析器可能会导致问题。
然后,我有以下几行:
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
。)