转自:http://yunkus.com/connect-flash-usage/

connect-flash 用法详解

 前端工具  2016-10-05  2016-10-05  朝夕熊  11

前言

说到 connect-flash ,估计也有很多朋友像我一样被它虐了好一阵子,很多朋友可能都会遇到过这个问题:Express4.x 中的 connect-flash 为什么不起作用?或者 connect-flash 怎么用?诸如此类的问题,在这里我就给大家戳破 connect-flash 的神秘面纱!

官方解释

The flash is a special area of the session used for storing messages. Messages are written to the flash and cleared after being displayed to the user. The flash is typically used in combination with redirects, ensuring that the message is available to the next page that is to be rendered.

大概的意思就是 flash 是 session 中一个用于存储信息的特殊区域。消息写入到 flash 中,在跳转目标页中显示该消息。flash 是配置 redirect 一同使用的,以确保消息在目标页面中可用。

flash 可用于一次性的消息提示,比如注册,登录页面,当你再次刷新时,flash就没有提示消息了。

connect-flash安装

工欲善其事,必先利其器,所以我们先来看看怎么安装 connect-flash。其实它的安装跟其它的模块安装是一样的,所以你很轻易的就可以把它安装好,切换到项目目录,运行如下命令行:

  1. $ npm install connect-flash

安装完之后,你还需要安装一个 express-session 模块,因为 connect-flash 是需要存储在 session 模块,运行如下命令行:

  1. $ npm install express-session
注意

安装connect-flash和express-session这两个模块时不要在命令行中添加-g(全局安装),因为安装到全局后,可以在你收入这两个模块时就会出现路径的问题,为了尽可能地减少繁琐的操作,我们直接安装到当前项目目录即可!

配置

配置 app.js 文件

安装完以上两个模块后,我们需要对相应的文件进行配置,打开app.js 添加如下代码:

  1. var settings = require('./settings'); //配置信息
  2. var flash = require('connect-flash');
  3. var session = require('express-session');
  4. app.use(session({
  5. secret: settings.cookieSecret, //加密
  6. key: settings.db, //cookie nam
  7. cookie: {maxAge: 60000},
  8. resave: false,
  9. saveUninitialized: true,
  10. }));
  11. app.use(flash());
  12. // set flash
  13. app.use(function (req, res, next) {
  14. res.locals.errors = req.flash('error');
  15. res.locals.infos = req.flash('info');
  16. next();
  17. });

代码中的settings.cookieSecretsettings.db是两个变量,它们的值已经事先写到了一个settings.js文件里了。

  1. module.exports = {
  2. cookieSecret: 'orders',
  3. db: 'ordersdb',
  4. host: 'localhost',
  5. port: 27017
  6. }

如果你觉得麻烦,你可以不使用变量的方式,直接给 secret ,key 写值。

如何使用

  1. // 登录
  2. router.get('/login', function(req, res, next) {
  3. res.render('login', { title: '欢迎登录' });
  4. });
  5. router.post('/login', function(req, res, next) {
  6. User.get(req.body.username,function(err,user){
  7. if(!user || user.name === ''){
  8. req.flash('error','用户不存在');
  9. return res.redirect('login');
  10. }
  11. if(req.body.password != user.password){
  12. req.flash('error','密码不对');
  13. return res.redirect('login');
  14. }
  15. req.flash('info','登录成功');
  16. res.redirect('login');
  17. })
  18. });

上面我以登录的路由代码作为例子,一看就懂,只需要在要显示信息的地方添加形如:req.flash('error','用户不存在');的代码就可以了。那怎么才能在页面中调用这些提示信息呢?我们接着往下看。下面是一个简单的调用例子,但也足以把问题说明白了。

  1. <div class="wrap">
  2. <div class="wrap-left">
  3. <ul>
  4. <li><a href="/">主页</a></li>
  5. <li><a href="/login">登录</a></li>
  6. <li><a href="/reg">注册</a></li>
  7. </ul>
  8. </div>
  9. <div class="wrap-right">
  10. <h1><%= title %></h1>
  11. <div class="wrap-content">
  12. <form method="post">
  13. <ul>
  14. <li>用户名:<input type="text" name="username"></li>
  15. <li>密码:<input type="text" name="password"></li>
  16. <li><button>登录</button></li>
  17. <li><%= errors %></li>
  18. </ul>
  19. </form>
  20. </div>
  21. </div>
  22. </div>

代码中的<%= errors %>就是调用相应的信息的方法,为什么要这样写呢?为什么里面的一个 errors,而不是 我们在 index.js 中写的req.flash('error','用户不存在');中的 error 变量呢?这个你看看我们一开始在 app.js 中的配置代码你就明白了。我们已经把req.flash('error');的提示信息赋值给了res.locals.errors,而我们如果要调用locals 中的 errors 变量,不需要写成locals.errors,而是直接写变量名 errors 就可以了。

conncet-flash 模块的用法就给大家分享到这里了,这里只给你一个实现的思路,并不会给你一个面包,但你可以通过这个思路做一个美味的面包。人人都讨厌伸手党,总想着天上掉面包,不如自己去做面包,人必自救,而后人救之。

68.connect-flash 用法详解 req,flash()的更多相关文章

  1. Oracle层级询语句connect by 用法详解

    如果表中包含层级数据,那么你就可以使用层级查询从句选择行层级顺序. 1.层级查询从句语法 层级查询从句语法: { CONNECT BY [ NOCYCLE ] condition [AND condi ...

  2. CSS3的@keyframes用法详解:

    CSS3的@keyframes用法详解:此属性与animation属性是密切相关的,关于animation属性可以参阅CSS3的animation属性用法详解一章节. 一.基本知识:keyframes ...

  3. oracle expdp/impdp 用法详解

    http://hi.baidu.com/hzfsai/item/4a4b3fc4b1cf7e51ad00efbd oracle expdp/impdp 用法详解 Data Pump 反映了整个导出/导 ...

  4. (转)linux traceroute命令参数及用法详解--linux跟踪路由命令

    linux traceroute命令参数及用法详解--linux跟踪路由命令 原文:http://blog.csdn.net/liyuan_669/article/details/25362505 通 ...

  5. [转帖]强大的strace命令用法详解

    强大的strace命令用法详解 文章转自: https://www.linuxidc.com/Linux/2018-01/150654.htm strace是什么? 按照strace官网的描述, st ...

  6. C#中string.format用法详解

    C#中string.format用法详解 本文实例总结了C#中string.format用法.分享给大家供大家参考.具体分析如下: String.Format 方法的几种定义: String.Form ...

  7. @RequestMapping 用法详解之地址映射

    @RequestMapping 用法详解之地址映射 引言: 前段时间项目中用到了RESTful模式来开发程序,但是当用POST.PUT模式提交数据时,发现服务器端接受不到提交的数据(服务器端参数绑定没 ...

  8. linux管道命令grep命令参数及用法详解---附使用案例|grep

    功能说明:查找文件里符合条件的字符串. 语 法:grep [-abcEFGhHilLnqrsvVwxy][-A<显示列数>][-B<显示列数>][-C<显示列数>] ...

  9. mysql中event的用法详解

    一.基本概念mysql5.1版本开始引进event概念.event既“时间触发器”,与triggers的事件触发不同,event类似与linux crontab计划任务,用于时间触发.通过单独或调用存 ...

随机推荐

  1. IDEA中FindBugs编码规范工具使用

    IDEA中安装FindBugs插件: file--Settings--Plugins 在Plugins搜索FindBugs: 安装完成后在项目中选中文件右键找到findBugs: 检查代码结果: 按照 ...

  2. 使用Java操作Redis(一)

    Redis是一款基于key-value的数据库服务器,安装完成后我们可以通过redis-cli使用Redis提供的命令完成各种操作.redis-cli实际上就是一款客户端,和redis-server建 ...

  3. Perceptron Learning Algorithm(python实现)

    一.概论 对于给定的n维(两种类型)数据(训练集),找出一个n-1维的面,能够"尽可能"地按照数据类型分开.通过这个面,我们可以通过这个面对测试数据进行预测. 例如对于二维数据,要 ...

  4. UVa 1151 Buy or Build【最小生成树】

    题意:给出n个点的坐标,现在需要让这n个点连通,可以直接在点与点之间连边,花费为两点之间欧几里得距离的平方,也可以选购套餐,套餐中所含的点是相互连通的 问最少的花费 首先想kruskal算法中,被加入 ...

  5. Git强制覆盖master分支

    在开发中,通常会保持两个分支master分支和develop分支,但是如果因为develop上面迭代太多而没有及时维护master,最后想丢弃master而直接将测试确认过的develop强推到mas ...

  6. NOIP2016 天天爱跑步(树上差分)

    题意 给定一棵树,从时刻 0 开始,有若干人从 S[i] 出发向 T[i] 移动,每单位时刻移动一条边 对于树上每个点 x,求 w[x]  时刻有多少人恰好路过 x N,M≤300000 题解 从上午 ...

  7. const 和 pointer

    一般的: const对pointer的修饰有两种: const type * p/type const * p:表示指针指向的变量的值不能改变,无论指针改变为指向哪一个变量 type * const ...

  8. lsof---查看你进程开打的文件

    lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户 ...

  9. 石子合并 (区间DP)

    一.试题在一个园形操场的四周摆放N堆石子(N≤100),现要将石子有次序地合并成一堆.规定每次仅仅能选相邻的两堆合并成新的一堆,并将新的一堆的石子数.记为该次合并的得分.编一程序.由文件读入堆数N及每 ...

  10. Shell脚本中替换字符串等操作

    在做shell批处理程序时候,常常会涉及到字符串相关操作. 有非常多命令语句.如:awk,sed都能够做字符串各种操作. 事实上shell内置一系列操作符号.能够达到类似效果,大家知道,使用内部操作符 ...