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 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
Nov 26 Javascript
jQuery学习2 选择器的使用说明
Feb 07 Javascript
Flexigrid在IE下不显示数据的处理的解决方法
Oct 24 Javascript
JQuery文本改变触发事件如聚焦事件、失焦事件
Jan 15 Javascript
详解js实现线段交点的三种算法
Aug 09 Javascript
原生JS实现图片轮播与淡入效果的简单实例
Aug 21 Javascript
Angularjs 制作购物车功能实例代码
Sep 14 Javascript
微信小程序 增、删、改、查操作实例详解
Jan 13 Javascript
浅析vue中常见循环遍历指令的使用 v-for
Apr 18 Javascript
JavaScript实现浅拷贝与深拷贝的方法分析
Jul 05 Javascript
解决bootstrap-select 动态加载数据不显示的问题
Aug 10 Javascript
浅谈JS中this在各个场景下的指向
Aug 14 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同时支持GIF、png、JPEG
2006/10/09 PHP
php实现最简单的MVC框架实例教程
2014/09/08 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
PHP和MYSQL实现分页导航思路详解
2017/04/11 PHP
PHP使用星号替代用户名手机和邮箱的实现代码
2018/02/07 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
Open and Print a Word Document
2007/06/15 Javascript
jQuery 获取对象 定位子对象
2010/05/31 Javascript
JavaScript Tips 使用DocumentFragment加快DOM渲染速度
2010/06/28 Javascript
基于jQuery的获得各种控件Value的方法
2010/11/19 Javascript
js动画(animate)简单引擎代码示例
2012/12/04 Javascript
两种常用的javascript数组去重方法思路及代码
2013/03/26 Javascript
JS中的substring和substr函数的区别说明
2013/05/07 Javascript
使用cluster 将自己的Node服务器扩展为多线程服务器
2014/11/10 Javascript
JQuery插件jcarousellite的参数中文说明
2015/05/11 Javascript
Sort()函数的多种用法
2016/03/20 Javascript
浅谈javascript中的constructor
2016/06/08 Javascript
js遍历map javaScript遍历map的简单实现
2016/08/26 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
Vue用v-for给循环标签自身属性添加属性值的方法
2018/10/18 Javascript
vant组件中 dialog的确认按钮的回调事件操作
2020/11/04 Javascript
[01:16]2014DOTA2 TI专访C9战队EE:中国五强中会占三席
2014/07/10 DOTA
Python中函数的参数定义和可变参数用法实例分析
2015/06/04 Python
python函数局部变量用法实例分析
2015/08/04 Python
Python2与python3中 for 循环语句基础与实例分析
2017/11/20 Python
python实现简单淘宝秒杀功能
2018/05/03 Python
解决python3中cv2读取中文路径的问题
2018/12/05 Python
使用Python实现毫秒级抢单功能
2019/06/06 Python
一行Python代码制作动态二维码的实现
2019/09/09 Python
python创建学生管理系统
2019/11/22 Python
HTML5 video 上传预览图片视频如何设置、预览视频某秒的海报帧
2018/08/28 HTML / CSS
动态密码技术
2012/10/18 面试题
医学专业五年以上个人求职信
2013/12/03 职场文书
清洁工表扬信
2014/01/08 职场文书
洗车工岗位职责
2014/03/15 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书