node.js cookie-parser 中间件介绍


Posted in Javascript onJune 06, 2016

之前加入了一个学习笔记本群,通过学习笔记来分享学习成果。也在这里发一份吧。

当我们在写web的时候,难免会要使用到cookie,由于node.js有了express这个web框架,我们就可以方便地去建站。在使用express时,经常会使用到cookie-parser这个插件。今天我们来分析一下这个插件。

这个插件通常当作中间件使用,app.use(cookieParser()), 这样就可以处理每一个请求的cookie。

从名字上看,这就是一个解释Cookie的工具。通过req.cookies可以取到传过来的cookie,并把它们转成对象。下面,我们来深入它的源码。

首先,我们看index.js

var cookie = require('cookie');

var parse = require('./lib/parse');

这里有2个引用,一个是cookie,一个是cookie-parser这个核心功能。cookie这个模块,只提供了2个方法,一个是serialize另一个是parse。

serialize方法接收key和val,并序列化。 

var hdr = cookie.serialize('foo', 'bar');    // hdr = 'foo=bar';

paser方法把字符串转成对象 

var cookies = cookie.parse('foo=bar; cat=meow; dog=ruff'); // cookies = { foo: 'bar', cat: 'meow', dog: 'ruff' };

再看下面,就是cookie-parser的主函数cookiePaser。 

exports = module.exports = function cookieParser(secret, options){

  return function cookieParser(req, res, next) {  // 从请求中得到req,res对象

    if (req.cookies) return next();  // 如果已经有cookie对象,则退出中间件继续运行

    var cookies = req.headers.cookie; // 从headers中取cookie

 

    req.secret = secret;                     // 如果有传入secret,则设置到req对象

    req.cookies = Object.create(null);       // 创建空对象给req.cookies

    req.signedCookies = Object.create(null); // 创建空对象给req.signedCookies

 

    // no cookies

    if (!cookies) {   // 如果没有从headers得到cookies

      return next();  // 退出中间件继续运行

    }

 

    req.cookies = cookie.parse(cookies, options);  // 调用cookie的parse方便把cookie字符串转成cookies对象。

 

    // parse signed cookies

    if (secret) {                                 // 如果设置了secret,则使用 parse的2个方法,把cookie签名。

      req.signedCookies = parse.signedCookies(req.cookies, secret);

      req.signedCookies = parse.JSONCookies(req.signedCookies);

    }

 

    // parse JSON cookies

    req.cookies = parse.JSONCookies(req.cookies); // 把req.cookies对象转化

 

    next();

  };

};

看了这个主函数,我们还有一些迷茫,正好就是它的主文件parse.js。我们在下次再看这个文件到底是做什么用的吧。

以上就是node.js cookie-parser 中间件的全部内容,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery总体架构的理解分析
Mar 07 Javascript
基于JQuery实现异步刷新的代码(转载)
Mar 29 Javascript
使用AngularJS处理单选框和复选框的简单方法
Jun 19 Javascript
javascript性能优化之事件委托实例详解
Dec 12 Javascript
javascript中new关键字详解
Dec 14 Javascript
Angular的事件和表单详解
Dec 26 Javascript
基于Particles.js制作超炫粒子动态背景效果(仿知乎)
Sep 13 Javascript
Vue2 配置 Axios api 接口调用文件的方法
Nov 13 Javascript
jQuery内容过滤选择器与子元素过滤选择器用法实例分析
Feb 20 jQuery
vue项目首屏打开速度慢的解决方法
Mar 31 Javascript
JS实现吸顶特效
Jan 08 Javascript
简介JavaScript错误处理机制
Aug 04 Javascript
JavaScript 对象字面量讲解
Jun 06 #Javascript
省市联动效果的简单实现代码(推荐)
Jun 06 #Javascript
js获取新浪天气接口的实现代码
Jun 06 #Javascript
浅谈Sublime Text 3运行JavaScript控制台
Jun 06 #Javascript
浅谈Jquery中Ajax异步请求中的async参数的作用
Jun 06 #Javascript
浅谈String.valueOf()方法的使用
Jun 06 #Javascript
深入理解JavaScript单体内置对象
Jun 06 #Javascript
You might like
电脑硬件及电脑配置知识大全
2020/03/17 数码科技
通过JavaScript或PHP检测Android设备的代码
2011/03/09 PHP
php数组函数序列之array_flip() 将数组键名与值对调
2011/11/07 PHP
js文字滚动停顿效果代码
2008/06/28 Javascript
纯javascript制作日历控件
2015/07/17 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
微信小程序实战之运维小项目
2017/01/17 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
Vue2.0 多 Tab切换组件的封装实例
2017/07/28 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
JS Input里添加小图标的两种方法
2017/11/11 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
vue 组件高级用法实例详解
2018/04/11 Javascript
详解Vue用cmd创建项目
2019/02/12 Javascript
JavaScript数据结构与算法之基本排序算法定义与效率比较【冒泡、选择、插入排序】
2019/02/21 Javascript
vue实现动态按钮功能
2019/05/13 Javascript
Vue 基于 vuedraggable 实现选中、拖拽、排序效果
2020/05/18 Javascript
使用typescript快速开发一个cli的实现示例
2020/12/09 Javascript
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
python如何查看系统网络流量的信息
2016/09/12 Python
使用python Fabric动态修改远程机器hosts的方法
2018/10/26 Python
PyCharm中如何直接使用Anaconda已安装的库
2020/05/28 Python
使用numpngw和matplotlib生成png动画的示例代码
2021/01/24 Python
css3实例教程 一款纯css3实现的发光屏幕旋转特效
2014/12/07 HTML / CSS
浅谈Html5页面打开app的一些思考
2020/03/30 HTML / CSS
俄罗斯购买内衣网站:Trusiki
2020/08/22 全球购物
销售工作人员的自我评价分享
2013/11/10 职场文书
班组长安全职责
2014/01/05 职场文书
端午节演讲稿
2014/05/23 职场文书
企业安全标语
2014/06/07 职场文书
2014年重阳节活动策划方案书
2014/09/16 职场文书
员工福利申请报告
2015/05/15 职场文书
村官2015年度工作总结
2015/10/14 职场文书
导游词之杭州岳王庙
2019/11/13 职场文书
MySQL索引是啥?不懂就问
2021/07/21 MySQL
vue如何清除浏览器历史栈
2022/05/25 Vue.js