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 相关文章推荐
qq悬浮代码(兼容各个浏览器)
Jan 29 Javascript
jquery中checkbox全选失效的解决方法
Dec 26 Javascript
javascript实现详细时间提醒信息效果的方法
Mar 11 Javascript
JQuery实现鼠标移动图片显示描述层的方法
Jun 25 Javascript
js自定义回调函数
Dec 13 Javascript
AngularJS基础 ng-paste 指令简单示例
Aug 02 Javascript
AngularJS的ng-repeat指令与scope继承关系实例详解
Jan 21 Javascript
layer弹出层框架alert与msg详解
Mar 14 Javascript
vue 左滑删除功能的示例代码
Jan 28 Javascript
npm 语义版本控制详解
Sep 10 Javascript
解决vue中el-tab-pane切换的问题
Jul 19 Javascript
js实现直播点击飘心效果
Aug 19 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
解析zend studio中直接导入svn中的项目的方法步骤
2013/06/21 PHP
PHP中使用TCPDF生成PDF文档实例
2014/07/01 PHP
PHP使用CURL实现对带有验证码的网站进行模拟登录的方法
2014/07/23 PHP
php支付宝手机网页支付类实例
2015/03/04 PHP
php生成静态html页面的方法(2种方法)
2015/09/14 PHP
php添加数据到xml文件的简单例子
2016/09/08 PHP
PHP文件与目录操作示例
2016/12/24 PHP
判断JavaScript对象是否可用的最正确方法分析
2008/10/03 Javascript
javascript中关于执行环境的杂谈
2011/08/14 Javascript
JavaScript判断密码强度(自写代码)
2013/09/06 Javascript
jquery实现点击文字可编辑并修改保存至数据库
2014/04/15 Javascript
JavaScript将数字转换成大写中文的方法
2015/03/23 Javascript
jQuery实现仿QQ空间装扮预览图片的鼠标提示效果代码
2015/10/30 Javascript
轻松学习jQuery插件EasyUI EasyUI实现拖动基本操作
2015/11/30 Javascript
Node.js测试中的Mock文件系统详解
2016/11/21 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
Javascript刷新页面的实例
2017/09/23 Javascript
react-native聊天室|RN版聊天App仿微信实例|RN仿微信界面
2019/11/12 Javascript
Python冒泡排序注意要点实例详解
2016/09/09 Python
深入理解python中的select模块
2017/04/23 Python
flask框架实现连接sqlite3数据库的方法分析
2018/07/16 Python
在Python中,不用while和for循环遍历列表的实例
2019/02/20 Python
Python 日期与时间转换的方法
2020/08/01 Python
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
Sony C++笔试题
2013/03/10 面试题
历史教育专业个人求职信
2013/12/13 职场文书
医药代表个人求职信范本
2013/12/19 职场文书
小学毕业家长寄语
2014/01/19 职场文书
信息总监管理职责范本
2014/03/08 职场文书
财务管理专业毕业生求职信
2014/06/02 职场文书
市场推广策划方案
2014/06/02 职场文书
锦旗标语大全
2014/06/23 职场文书
银行主办会计岗位职责
2014/08/13 职场文书
停发工资证明范本
2015/06/12 职场文书
详解在OpenCV中如何使用图像像素
2022/03/03 Python
【DOTA2】半决赛强强对话~ PSG LGD vs EHOME - DPC 2022 CN REGIONAL FINALS WINTER
2022/04/02 DOTA