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 相关文章推荐
Js 时间函数getYear()的使用问题探讨
Apr 01 Javascript
js简易namespace管理器 实例代码
Jun 21 Javascript
js动态删除div元素基本思路及实现代码
May 08 Javascript
jQuery中removeClass()方法用法实例
Jan 05 Javascript
浅谈javascript的分号的使用
May 12 Javascript
JavaScript中Boolean对象的属性解析
Oct 21 Javascript
Angularjs在初始化未完毕时出现闪烁问题的解决方法分析
Aug 05 Javascript
Angularjs cookie 操作实例详解
Sep 27 Javascript
vue router嵌套路由在history模式下刷新无法渲染页面问题的解决方法
Jan 25 Javascript
原生js实现抽奖小游戏
Jun 27 Javascript
vue在线动态切换主题色方案
Mar 26 Javascript
vue单应用在ios系统中实现微信分享功能操作
Sep 07 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.ini中文版(2)
2006/10/09 PHP
基于flush()不能按顺序输出时的解决办法
2013/06/29 PHP
利用PHP绘图函数实现简单验证码功能的方法
2016/10/18 PHP
javascript 自动转到命名锚记
2009/01/10 Javascript
jQuery1.3.2 升级到jQuery1.4.4需要修改的地方
2011/01/06 Javascript
一些常用的JavaScript函数(json)附详细说明
2011/05/25 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
自己动手写的javascript前端等待控件
2015/10/30 Javascript
基于javascript实现图片懒加载
2016/01/05 Javascript
jQuery基于排序功能实现上移、下移的方法
2016/11/26 Javascript
node.js通过axios实现网络请求的方法
2018/03/05 Javascript
vue实现条件叠加搜索的解决方法
2019/05/28 Javascript
vue3.0 项目搭建和使用流程
2021/03/04 Vue.js
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
[01:57]DOTA2上海特锦赛小组赛解说单车采访花絮
2016/02/27 DOTA
[01:48]帕吉至宝加入游戏,遗迹战场现“千劫神屠”
2018/04/07 DOTA
Python实现修改IE注册表功能示例
2018/05/10 Python
python里运用私有属性和方法总结
2019/07/08 Python
用Python画一个LinkinPark的logo代码实例
2019/09/10 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
Python魔法方法 容器部方法详解
2020/01/02 Python
Win10里python3创建虚拟环境的步骤
2020/01/31 Python
Python调用Windows命令打印文件
2020/02/07 Python
基于Tensorflow:CPU性能分析
2020/02/10 Python
python实现简单井字棋游戏
2020/03/04 Python
python3注册全局热键的实现
2020/03/22 Python
对django 2.x版本中models.ForeignKey()外键说明介绍
2020/03/30 Python
python实现逢七拍腿小游戏的思路详解
2020/05/26 Python
Python批量修改xml的坐标值全部转为整数的实例代码
2020/11/26 Python
药学专业大学生自荐信
2013/09/28 职场文书
实习自荐信
2013/10/13 职场文书
记帐员岗位责任制
2014/02/08 职场文书
个人先进材料范文
2014/12/30 职场文书
工作经历证明范本
2015/06/15 职场文书
教师远程研修感悟
2015/11/18 职场文书
Python list去重且保持原顺序不变的方法
2021/04/03 Python