connect-flash是Nodejs的一个模块,简单来说,flash是一个暂存器,而且暂存器里面的值使用过一次即被清空,这样的特性很方面用来做网站的提示信息。

connect-flash简介

connect-flash是Nodejs的一个模块,简单来说,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使用

如何使用

首先安装connect-flash:

1
$ npm install --save connect-flash

然后在app.js中引入:

1
flash = require('connect-flash');

在app中使用该中间件

1
app.use(flash());

将flash中存入的变量存入res.locals变量中,例如我要在网站中使用flash中存的error和success变量,就可以把它们存入到locals变量中,这样所有的模板都可以拿到这个变量。

1
2
3
4
5
6
7
8
9
10
11
12
app.use(function (req,res,next) {
console.log("app.usr local");
res.locals.user = req.session.user;
var err = req.flash('error');
res.locals.error = err.length ? err: null;
var success = req.flash('success');
res.locals.success = success.length ? success : null;
next();
});

应用程序本地变量会附加给所有的在这个应用程序内渲染的模板。 这是一个非常有用的模板函数,就像应用程序级数据一样。app.locals 对象是一个JavaScript Function, 执行的时候它会把属性合并到它自身,提供了一种简单展示已有对象作为本地变量的方法。

然后在页面中加入根据success和error是否存在给用户相应的提示,例如这里我们在main标签下判断success和error,如果有值,给出相应的提示:

1
2
3
4
5
6
7
8
9
10
11
<main>
<% if (success) { %>
<div class="alert alert-success">
<%= success %>
</div>
<% } %>
<% if (error) { %>
<div class="alert alert-error">
<%= error %>
</div>
<% } %>

在页面跳转之前给success和error赋值,就可以让它们获得相应的变量,显示给用户之后,这些变量会被清空。例如:

1
2
3
4
5
6
7
8
9
10
11
router.post('/login',function(req,res,next){
var name = req.body.username;
var password = req.body.password;
if(name === config.admin.username && password === config.admin.password) {
req.flash('success',"登录成功!");
res.render('index', {title: "后台管理程序"});
}else{
req.flash('error',"用户名或密码错误");
res.redirect('/login');
}
})