express中connect-flash中间件的使用

  在学习node的时候,flash是困扰我最久的一个中间件,之前一直都没有很好的理解,这里做一个总结。

  参考自:http://yunkus.com/connect-flash-usage/

 

什么是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之前,要引入express-session模块,它往往用在登录和注册,消息只会通知一次就消失了,其中redirect和flash是不能分开使用的。

 

安装与配置

  即通过npm安装 express-session模块 和 connect-flash模块 即可。

  配置app.js文件如下:

var settings = require('./settings'); //配置信息
var flash = require('connect-flash');
var session = require('express-session');
app.use(session({secret: settings.cookieSecret,  //加密key: settings.db, //cookie namcookie: {maxAge: 60000},resave: false,saveUninitialized: true,
}));
app.use(flash());
// set flash
app.use(function (req, res, next) {res.locals.errors = req.flash('error');res.locals.infos = req.flash('info');next();
});

 注意:上面定义locals对象下变量的时候一定要有next()向下传递,否则生产线就会停止。 

 另外,settings信息是必须配置的,这样更容易维护:

module.exports = {cookieSecret: 'orders',db: 'ordersdb',host: 'localhost',port: 27017
}

 

 

如何使用

  

// 登录
router.get('/login', function(req, res, next) {res.render('login', { title: '欢迎登录' });
});
router.post('/login', function(req, res, next) {User.get(req.body.username,function(err,user){if(!user || user.name === ''){req.flash('error','用户不存在');return res.redirect('login');}if(req.body.password != user.password){req.flash('error','密码不对');return res.redirect('login');}req.flash('info','登录成功');res.redirect('login');})
});

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

 

<div class="wrap">
<div class="wrap-left"><ul><li><a href="/">主页</a></li><li><a href="/login">登录</a></li><li><a href="/reg">注册</a></li></ul>
</div>
<div class="wrap-right"><h1><%= title %></h1><div class="wrap-content"><form method="post"><ul><li>用户名:<input type="text" name="username"></li><li>密码:<input type="text" name="password"></li><li><button>登录</button></li><li><%= errors %></li></ul></form>    </div>
</div>
</div>

 

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

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

 

  <h5 class="text-center"><%= success %></h5><h5 class="text-center"><%= error %></h5>

 

 

 

 

结束

转载于:https://www.cnblogs.com/zhuzhenwei918/p/6785259.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/355707.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

spring environment_程序员:Spring项目中简单几步实现多个动态数据源切换

每一个请求与其他的用户是面对不同的数据库&#xff0c;这就需要用到动态数据源切换&#xff0c;来满足不同数据库、不同数据表(不同数据源)的灵活调用。动态数据源切换满足mysql、oracle等主流数据库进行动态数据源切换。使用方法在 WEB-INF 目录下建立 lib 目录&#xff0c;并…

算法笔记_163:算法提高 最大乘积(Java)

目录 1 问题描述 2 解决方案 1 问题描述 问题描述对于n个数&#xff0c;从中取出m个数&#xff0c;如何取使得这m个数的乘积最大呢&#xff1f;输入格式第一行一个数表示数据组数每组输入数据共2行&#xff1a;第1行给出总共的数字的个数n和要取的数的个数m&#xff0c;1<n&…

ServletRequest startAsync()的用途有限

前段时间我遇到了Servlet 3.0中AsyncContext.start&#xff08;…&#xff09;的目的是什么&#xff1f; 题。 引用上述方法的Javadoc &#xff1a; 使容器调度线程&#xff08;可能从托管线程池中&#xff09;运行指定的Runnable 。 提醒大家&#xff0c; AsyncContext是Servl…

python3.7下载tensorflow_【AI初体验】在anaconda中python3.7版本安装Tensorflow 与 Keras来玩玩...

哈啰&#xff0c;大家好&#xff0c; 单纯分享自己摸索学习AI的过程&#xff0c; 在自己的文章【Python 超入门】(1) 心原一马从零开始带你学程序中&#xff0c; 记录了安装撰写python的工具-anaconda 的方法&#xff0c; 当时安装的版本是python3.7版&#xff0c; 但是据说目前…

com/mysql/jdbc/sqlerror_com.mysql.jdbc.sqlerror

at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1052)在MYSQL中的BLOB字段中插入图片&#xff0c;提示出错&#xff01;&#xff01;&#xff01;加载MYSQL驱动成功com.mysql.jdbc.JDBC4Connection1479febc:\Users\hjx\Desktop\pic.jpgfile:8202com/search?q38…

Cocos2d-x3.1FileUtilsTest使用

Cocos2d-x3.1中FileUtils的使用&#xff1a;本使用教程是基于HelloWorld的。仅仅需在HelloWorld的init()函数中加入例如以下代码 //头文件 #include "platform/CCFileUtils.h"//FileUtils头文件 #include <stdio.h>//使用文件操作 #include "deprecated/C…

古巴平台上的通用过滤器–类固醇上的excel过滤器

正如我上次承诺的那样&#xff0c;我计划浏览该平台的某些功能&#xff0c;这些功能我认为非常有价值。 所以我将在这里做一些系列。 从明显的用户界面&#xff0c;过滤&#xff0c;安全性到一些高级功能&#xff08;如Web Portal&#xff0c;可扩展性&#xff0c;审核&#xf…

python关键字详解_Python 中的关键字with详解

在 Python 2.5 中&#xff0c;with关键字被加入。它将常用的 try ... except ... finally ...模式很方便的被复用。看一个最经典的例子&#xff1a; with open(file.txt) as f: content f.read() 在这段代码中&#xff0c;无论with中的代码块在执行的过程中发生任何情况&#…

python interactive window_如果PySide应用程序是从IPython interactive cons运行的,上下文菜单就会消失...

在下面给出的最小示例中&#xff0c;上下文菜单(右键单击gui的白色部分)仅短暂显示&#xff0c;然后消失。如果应用程序是从IPython(0.13.1)控制台启动的&#xff0c;则会出现这种情况。当从shell正常启动时&#xff0c;它可以正常工作。在import sysfrom PySide import QtGui,…

基准测试:Java 8 Lambda和流如何使您的代码慢5倍

与长期的实现相比&#xff0c;Java 8 lambda和流的性能如何&#xff1f; Lambda表达式和流在Java 8中受到了热烈的欢迎。这些是迄今为止很激动人心的功能&#xff0c;很长一段时间以来&#xff0c;它们就已经应用到Java中了。 新的语言功能使我们可以在代码中采用更具功能性的…

ssm框架逻辑删除mysql_MybatisPlus--CRUD接口及主键增长策略、自动填充、乐观锁更新数据...

目录一、insert1、插入操作2、主键策略二、update1、根据Id更新操作2、自动填充3、乐观锁三、select1、根据id查询记录2、通过多个id批量查询3、简单的条件查询4、分页四、delete1、根据id删除记录2、批量删除3、简单的条件查询删除4、逻辑删除一、insert1、插入操作RunWith(Sp…

python对英语的要求_学python需要英语基础吗

在很多人的眼里&#xff0c;学习编程需要英语基础&#xff0c;因为程序代码全是英文字母&#xff0c;如果没有英语基础可能很难学懂编程。程序代码是英文确实没有错&#xff0c;但是也不是必须得懂英语&#xff0c;因为计算机程序有自己语言&#xff0c;并不是我们生活中的英语…

mysql5.6 优点_MySQL5.6复制:GTID的优点和限制(第一部分)_MySQL

bitsCN.com全局事务标示符(Global Transactions Identifier)是MySQL 5.6复制的一个新特性。它为维护特定的复制拓扑结构下服务器的DBA们大幅度改善他们的工作状况提供了多种可能性。然而&#xff0c;你还应该明白当前实现的一些局限。本博文是专门对在生产环境中启用GTID到底意…

python找不到csv文件_Python如何读取csv文件

逗号分隔值&#xff08;Comma-Separated Values&#xff0c;CSV&#xff0c;有时也称为字符分隔值&#xff0c;因为分隔字符也可以不是逗号&#xff09;&#xff0c;其文件以纯文本形式存储表格数据&#xff08;数字和文本&#xff09;。纯文本意味着该文件是一个字符序列&…

jsf 自定义属性_必填字段的自定义JSF验证器

jsf 自定义属性实现EditableValueHolder接口的JSF组件具有两个属性“ required”和“ requiredMessage” –一个标志&#xff0c;指示用户需要输入/选择非空值&#xff0c;以及一个用于验证消息的文本。 我们可以使用它&#xff0c;但是它不够灵活&#xff0c;我们不能直接在视…

Python那些事

Python这几年很火&#xff0c;在这里我用问答的方式来总结一下使用python的一些常见问题&#xff0c;对自己是个总结&#xff0c;也希望对有同样问题的朋友有帮助。Q&#xff1a;Python为什么流行&#xff1f;A&#xff1a;Python是一个比较方便的跨平台脚本语言。对于像我这种…

python cv2模块imshow_Python-OpenCV:cv2.imread(),cv2.imshow(),cv2.imwrite()

一、需要工具本机使用python 2.7.10下调试代码均通过&#xff0c;一下学习需要有一定的代码阅读能力&#xff0c;一下学习只介绍函数方法&#xff1a;Python 作为一种高效简洁的直译式语言非常适合我们用来解决日常工作的问题。而且它简单易学&#xff0c;初学者几个小时就可以…

python程序设计课程设计_《Python程序设计》教学大纲.doc

PAGE 理论课程教学大纲 《Python程序设计》教学大纲 课程编号&#xff1a; 总 学 时&#xff1a;64&#xff08;其中&#xff0c;讲课&#xff1a;32&#xff1b;实验&#xff1a;32&#xff09; 学 分&#xff1a;3 实践教学&#xff1a;0周 修读专业&#xff1a;地理信息系统…

2016年将是Java终于拥有窗口函数的那一年!

你没听错。 到目前为止&#xff0c;出色的窗口功能是SQL独有的功能。 即使是复杂的函数式编程语言似乎也缺少这种漂亮的功能&#xff08;如果我记错了&#xff0c;请纠正我&#xff0c;Haskell伙计们&#xff09;。 我们撰写了许多有关窗口函数的博客文章&#xff0c;并在诸如…

LINQ to Entities 不识别方法“System.String ToString() 的解决方法

今天在做一个页面的时候出现了LINQ to Entities 不识别方法“System.String ToString()”的错误&#xff0c;对于源码IQueryable<SelectListItem> items roleInfoServer.Get(r > true).Select(r > new SelectListItem() { Value r.Id.ToString(), Text r.RoleNa…