Express + Node.js实现登录拦截器的实例代码
介绍
这边的拦截器,对应于springMVC中的filter,所有的http请求,通过拦截器处理之后才能访问到对应的代码/资源。
最典型的应用场景就是实现访问权限控制,给予不同的用户/用户组不同的页面和接口访问权限,仅能够访问允许的页面和接口。
场景
app.post('/login',function(request,res,next){ //dosomething }); app.post('/getData',function(request,res,next){ //dosomething vardata="somedata"; res.send({"data":data}); });
如果不做任何处理,任何人发送getData的post请求可以直接从后台读取数据,而不需要任何的登陆,只需要知道接口就可以。
对应每个接口,如果在每个接口下面加上权限判断,代码会非常的重复,于是面向切面就来了,可以通过把拦截器加在每个http请求之前,来实现权限判断的功能。
实现
//所有用户可以访问index.html,error.html //admin可以访问admin.html,/getData //登陆用户可以访问home.html app.all('/*',function(request,res,next){ //思路: //得到请求的url //然后得到request的cookie,根据cookie得到当前登陆的用户 //判断用户对应url的权限 varjsPattern=/\.js$/; varurl=request.orignalUrl; if(jsPattern.test(url)){ //公共部分,放行 next(); return; } if(url=='index.html'||url=='error.html'){ next(); return; } varcookie=JSON.stringify(req.cookies); if(access){ next(); } else{ res.redirect('error.html'); } });
实现思路:
1.拦截所有请求(上面的就可以啦),得到当前访问的url
2.根据cookie得到当前用户
3.根据url和用户对应的身份来判断是否可以访问
4.如果可以调用next();
5.如果不能访问,返回错误信息
注意
- next();仅仅是一个函数,对应着原本处理请求的代码,如前面的app.post(‘/getData'),当这里的代码处理完成后会回到对应next();处,所以需要处理好对应的关系,如果必要需要return结束当前的函数,不然会出错哒。
- 对于公共的部分,如js插件,部分图片,还有css的部分,可以直接放行。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持毛票票。