首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Nodejs Flash消息仅在页面刷新后加载(connect-flash)

Nodejs Flash消息仅在页面刷新后加载(connect-flash)
EN

Stack Overflow用户
提问于 2018-04-28 19:40:14
回答 2查看 1.1K关注 0票数 1

我被connect-flash卡住了,所有的flash消息都不会加载到页面上,除非我刷新几次,我不确定为什么。

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

App.js代码:

代码语言:javascript
复制
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页面的代码:

代码语言:javascript
复制
<h1>Flash page</h1>
{‌{#if success}}
<h2>{‌{success}}</h2>
{‌{/if}}

非常感谢高级,任何帮助都将是非常感谢的家伙。

EN

回答 2

Stack Overflow用户

发布于 2018-04-28 19:44:15

它们会在一次刷新后渲染吗?这就是他们应该如何工作的。

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

票数 2
EN

Stack Overflow用户

发布于 2019-10-09 12:40:47

当我浏览the docs of express-session的时候,我正在滚动我自己的新版本的req.flash,偶然发现了这个宝石:

注意:从1.5.0版本开始,不再需要使用cookie解析器中间件来使此模块工作。这个模块现在可以直接在req/res上读写cookie了。如果此模块和cookie解析器之间的密码不同,则使用cookie解析器可能会导致问题。

看,我有这些台词:

代码语言:javascript
复制
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行更改为:

代码语言:javascript
复制
app.use(require('cookie-parser')(process.env.SESSION_STORE_SECRET))`

它完全按照预期工作!

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50076150

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档