最近在学node.js的express框架,做了一个上手项目后,对其中一些内容有些不理解就做了一次回顾,下面先讲目前刚刚理解的express框架中的flash操作。
connect-flash,目前npm官方的文档事实上已经落后一个版本了,目前的文档仍然是express3.x,已经不适用了。所以我们就学习别人在express4.x中怎么写,下面讲讲我学习后的理解。
首先是根据官方文档的定义,flash是session中一个特殊的,用来存储消息的地方。消息被写入flash并且在展示给用户看了以后会被清除。它通常会和重定向一起使用,确保消息对下一个展示的页面能够使用。(英文水平一般,就翻译到这了(别骂,要脸))。
首先是大家都能理解的,flash消息是储存在session当中的。首当其冲就是要引用cookieParser和session这两个中间件。然后再用flash这个中间件,express4x中初始化项目中app.js会自己引用cookieParse,我们只需要做session引入和flash引入并且进行设置。
首先是app.js中的操作
var settings=require('./settings')
var cookieSession=require('cookie-session');
var flash=require('connect-flash');
//首先是cookieSession设置
app.use(cookieSession({
//这里的setting写的是一些设置方面的内容
//由于我们本次不会涉及到数据库操作,在这里就不展开了。
secret: settings.cookieSecret, //加密
key: settings.db, //cookie nam
cookie: {maxAge: 60000},
resave: false,
saveUninitialized: true,
}));
app.use(flash());
app.use(function(req,res,next){
//这里设置了两个flash,一个是错误,一个是成功。
var err = req.flash('error');
var success = req.flash('success');
//下面两个就是发送操作了
res.locals.errors = err.length ? err : null;
res.locals.success = success.length ? success : null;
next();
})
上面的操作要写在路由操作之前。不然就会报错,因为出现消息的操作是在路由内发生的,放在路由操作前会导致上述方法不被调用
在这里贴一下res.locals的定义
res.locals:包含响应局部变量的对象,其作用域为请求,因此仅对在该请求/响应周期(如果有)期间呈现的视图可用。
我们在上面使用req.flash(),进行了一个请求的操作。将flash消息(这个消息的键会是error,值会在下面讲到)发送到session。然后响应我们的发送过去的flash消息(大概就是这样的意思)。
接下来是路由index.js当中的内容
router.get('/login',function(req,res){
res.render('flash',{title:'欢迎登陆'});
})
router.post('/login',function(req,res){
if(req.body.user==''){
req.flash('error','用户名不存在');
}
res.redirect('/login');
});
我们设置了一个get页面跳转和页面的表单的信息获取,其中我们设置了一个req.flash(‘error’,‘用户名不存在’);这样一个操作,这就和前面的nodejs当中设置的req.flash(‘error’)有了一个关系,这时候如果我们表单输入的用户名为空的情况下我们就有一个叫用户名不存在的error,类似{error:‘用户名不存在’},这样。
再接下来就是页面的操作了,有这样一个error,用户也希望自己能够知道自己错在哪。
<%if(errors){%>
<div class="alert alert-danger">
<%=errors%>
</div>
<%}%>
res.locals.errors的值的内容就会反应到这个页面上来,我们用的是bootstrap模板进行警报框制作的,因为没有这个模板默认情况下好像跳不出errors的内容出来。
最后给大家看一下运行之后的结果。
以上就是今天的关于flash的分享了,理解有限,望海涵。