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访问样式表代码
Oct 15 Javascript
JQuery.closest(),parent(),parents()寻找父结点
Feb 17 Javascript
在jQuery中 关于json空对象筛选替换
Apr 15 Javascript
JSON相关知识汇总
Jul 03 Javascript
Jquery+Ajax+PHP+MySQL实现分类列表管理(下)
Oct 28 Javascript
4种JavaScript实现简单tab选项卡切换的方法
Jan 06 Javascript
第一章之初识Bootstrap
Apr 25 Javascript
javascript RegExp 使用说明
May 21 Javascript
js判断主流浏览器类型和版本号的简单实现代码
May 26 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
May 07 Javascript
关于Vue Webpack2单元测试示例详解
Aug 14 Javascript
vue组件三大核心概念图文详解
May 30 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查看网页源代码的方法
2015/03/13 PHP
PHP实现补齐关闭的HTML标签
2016/03/22 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
redis+php实现微博(一)注册与登录功能详解
2019/09/23 PHP
JavaScript的null和undefined区别示例介绍
2014/09/15 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
jQuery判断数组是否包含了指定的元素
2015/03/10 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
表单验证正则表达式实例代码详解
2015/11/09 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
浅谈vue自定义全局组件并通过全局方法 Vue.use() 使用该组件
2017/12/07 Javascript
详解如何在微信小程序中愉快地使用sass
2018/07/30 Javascript
简单了解vue.js数组的常用操作
2019/06/17 Javascript
jQuery 实现扁平式小清新导航
2020/07/07 jQuery
JS+CSS实现炫酷光感效果
2020/09/05 Javascript
js面试题之异步问题的深入理解
2020/09/20 Javascript
Python3 利用requests 库进行post携带账号密码请求数据的方法
2018/10/26 Python
python调用matlab的m自定义函数方法
2019/02/18 Python
使用python itchat包爬取微信好友头像形成矩形头像集的方法
2019/02/21 Python
Python一行代码实现快速排序的方法
2019/04/30 Python
python实现文件的备份流程详解
2019/06/18 Python
python写一个随机点名软件的实例
2019/11/28 Python
python numpy矩阵信息说明,shape,size,dtype
2020/05/22 Python
python 基于opencv去除图片阴影
2021/01/26 Python
Pycharm创建python文件自动添加日期作者等信息(步骤详解)
2021/02/03 Python
浅谈关于html5中图片抛物线运动的一些心得
2018/01/09 HTML / CSS
美国时尚孕妇装品牌:A Pea in the Pod
2017/07/16 全球购物
财务人员个人自荐信范文
2013/09/26 职场文书
生产车间主管岗位职责
2013/12/28 职场文书
出生医学证明样本
2014/01/17 职场文书
员工工作表现评语
2014/04/26 职场文书
公务员个人年终总结
2015/02/12 职场文书
环保建议书作文400字
2015/09/14 职场文书
《植树问题》教学反思
2016/03/03 职场文书
2019最新校园运动会广播稿!
2019/06/28 职场文书
nginx配置限速限流基于内置模块
2022/05/02 Servers