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 相关文章推荐
用jquery.sortElements实现table排序
May 04 Javascript
jqGrid读取选择的多行的某个属性代码
May 18 Javascript
JS中捕获console.log()输出的方法
Apr 16 Javascript
分享10个原生JavaScript技巧
Apr 20 Javascript
jQuery旋转木马式幻灯片轮播特效
Dec 04 Javascript
js中toString()和String()区别详解
Mar 23 Javascript
jquery实现侧边栏左右伸缩效果的示例
Dec 19 jQuery
详解webpack loader和plugin编写
Oct 12 Javascript
vue使用i18n实现国际化的方法详解
Sep 05 Javascript
createObjectURL方法实现本地图片预览
Sep 30 Javascript
使用Bootstrap做一个朝代历史表
Dec 10 Javascript
Vue如何循环提取对象数组中的值
Nov 18 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输出缓存ob系列函数详解
2014/03/11 PHP
PHP获取文件夹内文件数的方法
2015/03/12 PHP
CI操作cookie的方法分析(基于helper类库)
2016/03/28 PHP
Yii2实现上下联动下拉框功能的方法
2016/08/10 PHP
jquery插件jbox使用iframe关闭问题
2009/02/09 Javascript
40款非常有用的 jQuery 插件推荐(系列一)
2011/12/21 Javascript
jQuery 获取URL的GET参数值的小例子
2013/04/18 Javascript
js跨浏览器实现将字符串转化为xml对象的方法
2013/09/25 Javascript
jQuery动态显示和隐藏datagrid中的某一列的方法
2013/12/11 Javascript
asp.net刷新本页面的六种方法总结
2014/01/07 Javascript
浅析JS获取url中的参数实例代码
2016/06/14 Javascript
easyui combobox开启搜索自动完成功能的实例代码
2016/11/08 Javascript
微信小程序 省市区选择器实例详解(附源码下载)
2017/01/05 Javascript
基于jQuery和CSS3实现APPLE TV海报视差效果
2017/06/16 jQuery
微信小程序6位或多位验证码密码输入框功能的实现代码
2018/05/29 Javascript
AngularJS 前台分页实现的示例代码
2018/06/07 Javascript
对angularJs中ng-style动态改变样式的实例讲解
2018/09/30 Javascript
扫微信小程序码实现网站登陆实现解析
2019/08/20 Javascript
jQuery实现移动端下拉展现新的内容回弹动画
2020/06/24 jQuery
vue-router 2.0 跳转之router.push()用法说明
2020/08/12 Javascript
使用jQuery实现购物车
2020/10/29 jQuery
[01:21:07]EG vs Liquid 2018国际邀请赛淘汰赛BO3 第一场 8.25
2018/08/29 DOTA
对python中词典的values值的修改或新增KEY详解
2019/01/20 Python
python 求1-100之间的奇数或者偶数之和的实例
2019/06/11 Python
Python 开发工具PyCharm安装教程图文详解(新手必看)
2020/02/28 Python
python不同版本的_new_不同点总结
2020/12/09 Python
python 模块导入问题汇总
2021/02/01 Python
吉列剃须刀美国官网:Gillette美国
2018/07/13 全球购物
四年的个人工作自我评价
2013/12/10 职场文书
护士求职自荐信范文
2014/03/19 职场文书
教师师德考核自我评价
2014/09/13 职场文书
试用期转正后的自我评价
2014/09/21 职场文书
乔迁之喜答谢词
2015/01/05 职场文书
员工辞职信范文大全
2015/05/12 职场文书
故意杀人案辩护词
2015/05/21 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python