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 相关文章推荐
ie focus bug 解决方法
Sep 03 Javascript
JavaScript 学习笔记(九)call和apply方法
Jan 11 Javascript
javascript 闭包详解
Feb 15 Javascript
深入探讨javascript函数式编程
Oct 11 Javascript
无缝滚动的简单实现代码(推荐)
Jun 07 Javascript
nginx配置React静态页面的方法教程
Nov 03 Javascript
基于javascript 显式转换与隐式转换(详解)
Dec 15 Javascript
浅谈用Webpack路径压缩图片上传尺寸获取的问题
Feb 22 Javascript
基于JS开发微信网页录音功能的实例代码
Apr 30 Javascript
基于JS实现计算24点算法代码实例解析
Jul 23 Javascript
vue+axios 拦截器实现统一token的案例
Sep 11 Javascript
不依任何赖第三方,单纯用vue实现Tree 树形控件的案例
Sep 21 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
PHP 翻页 实例代码
2009/08/07 PHP
用PHP读取和编写XML DOM的实现代码
2011/02/03 PHP
js 键盘记录实现(兼容FireFox和IE)
2010/02/07 Javascript
javascript学习之闭包分析
2010/12/02 Javascript
jquery获得option的值和对option进行操作
2013/12/13 Javascript
Javascript自定义函数判断网站访问类型是PC还是移动终端
2014/01/10 Javascript
jquery禁止回车触发表单提交
2014/12/12 Javascript
javascript实现表格排序 编辑 拖拽 缩放
2015/01/02 Javascript
js实现简单折叠、展开菜单的方法
2015/08/28 Javascript
js实现搜索框关键字智能匹配代码
2020/03/26 Javascript
vuejs 单文件组件.vue 文件的使用
2017/07/28 Javascript
jQuery 开发之EasyUI 添加数据的实例
2017/09/26 jQuery
js实现同一个页面,多个enter事件绑定的示例
2018/10/10 Javascript
vue组件tabbar使用方法详解
2018/11/06 Javascript
jquery实现垂直无限轮播的方法分析
2019/07/16 jQuery
JS实现打砖块游戏
2020/02/14 Javascript
24个ES6方法解决JS实际开发问题(小结)
2020/05/31 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
vue实现桌面向网页拖动文件的示例代码(可显示图片/音频/视频)
2021/03/01 Vue.js
Python实现破解猜数游戏算法示例
2017/09/25 Python
Python Pillow Image Invert
2019/01/22 Python
Python数组并集交集补集代码实例
2020/02/18 Python
Python判断变量是否是None写法代码实例
2020/10/09 Python
总结30个CSS3选择器
2017/04/13 HTML / CSS
韩国三星旗下的一家超市连锁店:Home Plus
2016/07/30 全球购物
热能动力工程毕业生自荐信
2013/11/07 职场文书
团代会主持词
2014/04/02 职场文书
工作鉴定评语
2014/05/04 职场文书
房地产广告策划方案
2014/05/15 职场文书
初中班主任经验交流材料
2014/05/16 职场文书
励志演讲稿300字
2014/08/21 职场文书
教师群众路线剖析材料
2014/09/29 职场文书
批评与自我批评总结
2014/10/17 职场文书
导游词400字
2015/02/13 职场文书
python保存大型 .mat 数据文件报错超出 IO 限制的操作
2021/05/10 Python
Python OpenCV形态学运算示例详解
2022/04/07 Python