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 相关文章推荐
JavaScript初学者应注意的七个细节小结
Jan 30 Javascript
使用js判断数组中是否包含某一元素(类似于php中的in_array())
Dec 12 Javascript
js中定义一个变量并判断其是否为空的方法
May 13 Javascript
《JavaScript DOM 编程艺术》读书笔记之JavaScript 语法
Jan 09 Javascript
使用jQuery UI库开发Web界面的简单入门指引
Apr 22 Javascript
js通过classname来获取元素的方法
Nov 24 Javascript
js 性能优化之算法和流程控制
Feb 15 Javascript
vue2.0 element-ui中el-select选择器无法显示选中的内容(解决方法)
Aug 24 Javascript
vuejs2.0运用原生js实现简单拖拽元素功能
Aug 21 Javascript
vue中使用rem布局代码详解
Oct 30 Javascript
基于html+css+js实现简易计算器代码实例
Feb 28 Javascript
vue 使用rules对表单字段进行校验的步骤
Dec 25 Vue.js
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
PHP获取MAC地址的具体实例
2013/12/13 PHP
PHP实现求解最长公共子串问题的方法
2017/11/17 PHP
转一个日期输入控件,支持FF
2007/04/27 Javascript
类之Prototype.js学习
2007/06/13 Javascript
jquery对象和DOM对象的区别介绍
2013/08/09 Javascript
JavaScript获取客户端计算机硬件及系统等信息的方法
2014/01/02 Javascript
js跳转页面方法总结
2014/01/29 Javascript
node.js实现BigPipe详解
2014/12/05 Javascript
JS实现鼠标点击展开或隐藏表格行的方法
2015/03/03 Javascript
举例详解AngularJS中ngShow和ngHide的使用方法
2015/06/19 Javascript
javascript实现的简单计时器
2015/07/19 Javascript
javascript实现移动端上的触屏拖拽功能
2016/03/04 Javascript
实例详解jQuery的无new构建
2016/08/02 Javascript
Vue.js实现拖放效果的实例
2016/09/30 Javascript
jQuery实现ajax无刷新分页页码控件
2017/02/28 Javascript
ES6新特性之变量和字符串用法示例
2017/04/01 Javascript
vue实现文章内容过长点击阅读全文功能的实例
2017/12/28 Javascript
如何从0开始用node写一个自己的命令行程序
2018/12/29 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
javascript设计模式 ? 策略模式原理与用法实例分析
2020/04/21 Javascript
适用于 Vue 的播放器组件Vue-Video-Player操作
2020/11/16 Javascript
[00:32]2018DOTA2亚洲邀请赛VG出场
2018/04/03 DOTA
python读取csv文件示例(python操作csv)
2014/03/11 Python
python字典序问题实例
2014/09/26 Python
python对DICOM图像的读取方法详解
2017/07/17 Python
Python实现的IP端口扫描工具类示例
2019/02/15 Python
Python利用requests模块下载图片实例代码
2019/08/12 Python
python用什么编辑器进行项目开发
2020/06/17 Python
一款利用纯css3实现的win8加载动画的实例分析
2014/12/11 HTML / CSS
财务会计专业应届毕业生求职信
2013/10/18 职场文书
买房协议书
2014/04/11 职场文书
中等生评语大全
2014/05/04 职场文书
优秀大专毕业生求职信
2014/08/04 职场文书
小学庆六一主持词
2015/06/30 职场文书
浅谈自定义校验注解ConstraintValidator
2021/06/30 Java/Android
Android Studio实现带三角函数对数运算功能的高级计算器
2022/05/20 Java/Android