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

结束

时间: 2024-10-02 15:18:33

express中connect-flash中间件的使用的相关文章

express 中文文档

express() 创建一个express应用程序 var express = require('express'); var app = express(); app.get('/', function(req, res){ res.send('hello world'); }); app.listen(3000); Application app.set(name, value) 将设置项 name 的值设为 value app.set('title', 'My Site'); app.ge

Express中文文档

Express 4.x API express 翻译 api文档 中文 -- express() express()用来创建一个Express的程序.express()方法是express模块导出的顶层方法. var express = require('express'); var app = express(); Methods express.static(root, [options]) express.static是Express中唯一的内建中间件.它以server-static模块为

精华 对express中next函数的一些理解

关于next主要从三点来进行说明: next的作用是什么? 我们应该在何时使用next? next的内部实现机制是什么? Next的作用 我们在定义express中间件函数的时候都会将第三个参数定义为next,这个next就是我们今天的主角,next函数主要负责将控制权交给下一个中间件,如果当前中间件没有终结请求,并且next没有被调用,那么请求将被挂起,后边定义的中间件将得不到被执行的机会. 何时使用Next 从上边的描述我们已经知道,next函数主要是用来确保所有注册的中间件被一个接一个的执

express中使用 connect-flash 及其源码研究

刚开始摸node.js, 在用express 4.x 的过程中 有一个connect-flash的玩意 如上图, 在 /reg 页面提交注册信息的时候 如若两次输入的密码不匹配则调用请求对象req的flash方法写入提示消息: 然后 在展示 /reg 页面的时候取出抛给视图模版: 看起来就像个字典对象 这个包必须在引用 express-session 包的前提下才能使用 why1 ,并且写入的值 在取出一次后即销毁 why2. 这非常像asp.net mvc里边的 tempdata对象 开源的东

浅析Express中的路由与应用模式

1. 引言 Express是一个基于Node.js的轻量级web开发框架,具有体积小,使用灵活等特点.查看Express的源码,如果不计供使用的中间件,主体框架只有一千余行代码,非常简练. Express模型的核心为Express中定义的路由和路由器.分析Express源码可发现Express的路由提供多种灵活的应用模式. 我们首先介绍一下Express中的路由.路由器相关概念.结构及其特点,然后针对典型场景描述使用Express路由的四种应用模式. 2.Express中的路由与路由器 Expr

node.js之express中app.use

express中app.use 用法: app.use([path,] function [, function…]) 一.app.use() 在express中是怎么工作的 app.use在express中被看成是消息中间件 middleware . Use the given middleware function, with optional mount path, defaulting to “/”, 如果path没有被设定,那么默认为”/”. 引入一个所谓的中间件,其实就是用来再实际请

Express中使用mongodb存储session

express默认有队session的支持,但是是存储在内存中的. 我们可以使用mongodb来存储会话. 但是express的各个版本中对该功能的写法是不同的. Express 2.x: app.use(express.session({ secret: settings.cookieSecret, store: new MongoStore({ db: settings.db })})); Express 3.x: var express = require('express');var m

在页面中插入flash的代码实例

在页面中插入flash的代码实例: 有时候网页中需要插入一个flash,作为一个媒体文件,将其引入当然需要一定的格式,下面就介绍一下如何实现辞此功能,不过建议还是使用工具插入,比如使用DW,它就有专门的可视化工具直接点击按钮插入就可以了. 代码如下: <object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="62" height="62" type="a

解决android调用IIS Express中的WCF服务时,出现错误400问题

IIS Express仅支持localhost主机名地址访问. 找到IIS Express Config文件下的 applicationhost.confi   修改配置 再来调试android应用,发下已经成功调用 解决android调用IIS Express中的WCF服务时,出现错误400问题,布布扣,bubuko.com

Cisco中删除flash通过tftp服务器恢复

首先我们来看一下,Cisco路由器中的flash文件.通过show flash 命令来查看. 这时可以看到flash的版本是c1841-ipbasek9-mz.124-12.bin 下面我们删除这个flash 删除之后再查看flash,这时我们可以看到flash不在了. 这时,重启路由器,路由器重启不了. 下面我们从tftp服务器下载image. 下载操作系统镜像必须配置,tftp服务器地址和该路由器的ip地址,你所要下载的镜像.最后在执行tftpdnld.就可以下载镜像了. 这时输入tftpd