Express + Node.js实现登录拦截器的实例代码


Posted in Javascript onJuly 01, 2017

介绍

这边的拦截器,对应于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.html
app.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. 如果不能访问,返回错误信息

注意

  1. next(); 仅仅是一个函数,对应着原本处理请求的代码,如前面的app.post(‘/getData'),当这里的代码处理完成后会回到对应next(); 处,所以需要处理好对应的关系,如果必要需要return结束当前的函数,不然会出错哒。
  2. 对于公共的部分,如js插件,部分图片,还有css的部分,可以直接放行。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript Cookie的读取和写入函数
Dec 08 Javascript
jQuery.position()方法获取不到值的安全替换方法
Mar 13 Javascript
JS+JSP通过img标签调用实现静态页面访问次数统计的方法
Dec 14 Javascript
让你一句话理解闭包(简单易懂)
Jun 03 Javascript
100多个基础常用JS函数和语法集合大全
Feb 16 Javascript
JS实现一个简单的日历
Feb 22 Javascript
Angularjs 事件指令详细整理
Jul 27 Javascript
JS去掉字符串末尾的标点符号及删除最后一个字符的方法
Oct 24 Javascript
详细分析jsonp的原理和实现方式
Nov 20 Javascript
vue中v-for通过动态绑定class实现触发效果
Dec 06 Javascript
微信小程序bindtap事件与冒泡阻止详解
Aug 08 Javascript
js常用方法、检查是否有特殊字符串、倒序截取字符串操作完整示例
Jan 26 Javascript
详解node-ccap模块生成captcha验证码
Jul 01 #Javascript
vue元素实现动画过渡效果
Jul 01 #Javascript
JavaScript学习总结之正则的元字符和一些简单的应用
Jun 30 #Javascript
node.js + socket.io 实现点对点随机匹配聊天
Jun 30 #Javascript
详解vue中computed 和 watch的异同
Jun 30 #Javascript
JS 组件系列之Bootstrap Table 冻结列功能IE浏览器兼容性问题解决方案
Jun 30 #Javascript
vue2.0 axios前后端数据处理实例代码
Jun 30 #Javascript
You might like
聊天室php&mysql(二)
2006/10/09 PHP
php中使用exec,system等函数调用系统命令的方法(不建议使用,可导致安全问题)
2012/09/07 PHP
PHP多进程编程实例
2014/10/15 PHP
thinkphp3.0输出重复两次的解决方法
2014/12/19 PHP
详解PHP的Yii框架中日志的相关配置及使用
2015/12/08 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
Extjs NumberField后面加单位实现思路
2013/07/30 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
javascript实现五星评分功能
2015/11/10 Javascript
jQuery的each循环用法简单示例
2016/06/12 Javascript
javascript 将共享属性迁移到原型中去的实现方法
2016/08/31 Javascript
老生常谈js数据类型
2017/08/03 Javascript
layui select获取自定义属性方法
2018/08/15 Javascript
Vue 组件修改根实例的数据的方法
2019/04/02 Javascript
详解Vue 如何监听Array的变化
2019/06/06 Javascript
小程序实现点击tab切换左右滑动
2020/11/16 Javascript
python批量获取html内body内容的实例
2019/01/02 Python
Python多线程操作之互斥锁、递归锁、信号量、事件实例详解
2020/03/24 Python
python中pickle模块浅析
2020/12/29 Python
欧洲顶级体育电子商务网站:SportsShoes.com
2018/03/27 全球购物
Blue Nile蓝色尼罗河香港官网:世界最大在线钻石珠宝销售商
2020/05/07 全球购物
东方通信股份有限公司VC面试题
2014/08/27 面试题
params有什么用
2016/03/01 面试题
2013届毕业生求职信范文
2013/11/20 职场文书
人力资源管理毕业生自荐信
2013/11/21 职场文书
大学生职业规划书的范本
2014/02/18 职场文书
2014年重阳节敬老活动方案
2014/09/16 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
写给父母的感谢信
2015/01/22 职场文书
归元寺导游词
2015/02/06 职场文书
异地恋情人节寄语
2015/02/28 职场文书
2015年七七事变78周年纪念活动方案
2015/05/06 职场文书
红色经典观后感
2015/06/18 职场文书
导游词之崇武古城
2019/10/07 职场文书
python数据可视化JupyterLab实用扩展程序Mito
2021/11/20 Python
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫