Express + Node.js 实现拦截器
来源:互联网 发布:js 模块化编程 入门 编辑:程序博客网 时间:2024/05/18 20:34
介绍
这边的拦截器,对应于Spring MVC中的filter,所有的http请求,通过拦截器处理之后才能访问到对应的代码/资源。
最典型的应用场景就是实现访问权限控制,给予不同的用户/用户组不同的页面和接口访问权限,仅能够访问允许的页面和接口。
场景
app.post('/login', function(request, res, next){// do something});app.post('/getData',function(request, res, next){// do something var data="some data"; res.send({"data":data});});
如果不做任何处理,任何人发送getData的post请求可以直接从后台读取数据,而不需要任何的登陆,只需要知道接口就可以。
对应每个接口,如果在每个接口下面加上权限判断,代码会非常的重复,于是面向切面就来了,可以通过把拦截器加在每个http请求之前,来实现权限判断的功能。
实现
// 所有用户可以访问index.html, error.html// admin可以访问admin.html, /getData// 登陆用户可以访问home.htmlapp.all('/*', function(request, res, next){ // 思路: // 得到请求的url // 然后得到request的cookie,根据cookie得到当前登陆的用户 // 判断用户对应url的权限 var jsPattern=/\.js$/; var url=request.orignalUrl; if(jsPattern.test(url)){ // 公共部分,放行 next(); return; } if(url=='index.html'||url=='error.html'){ next(); return; } var cookie=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的部分,可以直接放行。
0 0
- Express + Node.js 实现拦截器
- 基于node Express 拦截器的实现
- node.js利用express实现文件上传
- node.js+express验证码的实现
- node.js的express实现jsonp
- Node.js+Express+Mongodb 实现学校论坛
- node.js 实现一个简单的登录拦截器
- Node.js express路由
- Node.js Express
- node.js+eclipse+express
- Node.js Express框架
- node.js+express+mysql
- Node.js Express框架
- Node.js 初探Express
- node.js express
- node.js express(二)
- Node.js Express 框架
- Node.js and Express
- Java 三大特性 —— 多态
- VS2013的OSG开发环境配置
- AnimationSet
- AnimationUtils
- 机器学习算法汇总:人工神经网络、深度学习及其它
- Express + Node.js 实现拦截器
- 微信公众平台从入门到精通二
- iOS文件写入读取
- spring MVC配置详解
- ListView的使用
- 迭代----- Maximum Depth of Binary Tree
- JSTL中EL表达式无法直接取size的处理
- jqgrid刷新列表,重新加载数据
- 学习笔记——MySQL