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的多功能软键盘插件
Jul 25 Javascript
jquery延迟加载外部js实现代码
Jan 11 Javascript
验证控件与Button的OnClientClick事件详细解析
Dec 04 Javascript
jQuery实现点击后标记当前菜单位置(背景高亮菜单)效果
Aug 22 Javascript
JS实现拖拽的方法分析
Dec 20 Javascript
JavaScript正则获取地址栏中参数的方法
Mar 02 Javascript
让axios发送表单请求形式的键值对post数据的实例
Aug 11 Javascript
webpack 从指定入口文件中提取公共文件的方法
Nov 13 Javascript
jQuery实现input输入框获取焦点与失去焦点时提示的消失与显示功能示例
May 27 jQuery
jquery html添加元素/删除元素操作实例详解
May 20 jQuery
微信小程序开发(二):页面跳转并传参操作示例
Jun 01 Javascript
如何在CocosCreator里画个炫酷的雷达图
Apr 16 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代码
2012/07/14 PHP
php中使用base HTTP验证的方法
2015/04/20 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
YII Framework教程之异常处理详解
2016/03/14 PHP
利用php输出不同的心形图案
2016/04/22 PHP
PHP 返回数组后处理方法(开户成功后弹窗提示)
2017/07/03 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
支持汉转拼和拼音分词的PHP中文工具类ChineseUtil
2018/02/23 PHP
Google Suggest ;-) 基于js的动态下拉菜单
2006/10/11 Javascript
jquery取子节点及当前节点属性值的方法
2014/09/09 Javascript
jQuery超精致图片轮播幻灯片特效代码分享
2015/09/10 Javascript
ES6的新特性概览
2016/03/10 Javascript
Avalonjs 实现简单购物车功能(实例代码)
2017/02/07 Javascript
react性能优化达到最大化的方法 immutable.js使用的必要性
2017/03/09 Javascript
基于JavaScript定位当前的地理位置
2017/04/11 Javascript
vue.js动态数据绑定学习笔记
2017/05/19 Javascript
vue-quill-editor实现图片上传功能
2017/08/08 Javascript
浅谈React Native Flexbox布局(小结)
2018/01/08 Javascript
如何去除vue项目中的#及其ie9兼容性
2018/01/11 Javascript
浅析Vue.js 中的条件渲染指令
2018/11/19 Javascript
vue.js实现回到顶部动画效果
2019/07/31 Javascript
Layer+Echarts构建弹出层折线图的方法
2019/09/25 Javascript
如何在vue-cli中使用css-loader实现css module
2021/01/07 Vue.js
[01:50]WODOTA制作 DOTA2中文宣传片《HERO》
2013/04/28 DOTA
Python标准库之sqlite3使用实例
2014/11/25 Python
Python 读写文件的操作代码
2018/09/20 Python
PyCharm安装Markdown插件的两种方法
2019/06/24 Python
opencv+pyQt5实现图片阈值编辑器/寻色块阈值利器
2020/11/13 Python
英国度假别墅预订:Sykes Cottages
2017/06/12 全球购物
全球在线商店:BerryLook
2019/04/14 全球购物
Kendra Scott官网:美国领先的时尚配饰品牌
2020/10/22 全球购物
法人授权委托书格式
2014/04/08 职场文书
超市仓管员岗位职责范本
2014/09/18 职场文书
2016年全国助残日活动总结
2016/04/01 职场文书
哪类餐饮行业,最适合在高校创业?
2019/08/19 职场文书
python基础之爬虫入门
2021/05/10 Python