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入门——事件切换之hover()方法应用介绍
Feb 05 Javascript
JQuery实现绚丽的横向下拉菜单
Dec 19 Javascript
让jQuery与其他JavaScript库并存避免冲突的方法
Dec 23 Javascript
jQuery中val()方法用法实例
Dec 25 Javascript
javascript针对不确定函数的执行方法
Dec 16 Javascript
如何让一个json文件显示在表格里【实现代码】
May 09 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 Javascript
BootStrap导航栏问题记录
Jul 31 Javascript
bootstrap轮播模板使用方法详解
Nov 17 Javascript
Vue引用Swiper4插件无法重写分页器样式的解决方法
Sep 27 Javascript
vue-cli系列之vue-cli-service整体架构浅析
Jan 14 Javascript
JS实现刷新网页后之前浏览位置保持不变示例详解
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中文乱码怎么办如何让浏览器自动识别utf-8
2014/01/15 PHP
浅析php静态方法与非静态方法的用法区别
2016/05/17 PHP
yii使用bootstrap分页样式的实例
2017/01/17 PHP
PHP中的自动加载操作实现方法详解
2019/08/06 PHP
Laravel框架之解决前端显示图片问题
2019/10/24 PHP
JavaScript 设计模式学习 Factory
2009/07/29 Javascript
js导航栏单击事件背景变换示例代码
2014/01/13 Javascript
使用javascript做的一个随机点名程序
2014/02/13 Javascript
Jsonp 关键字详解及json和jsonp的区别,ajax和jsonp的区别
2015/12/30 Javascript
JS组件Bootstrap dropdown组件扩展hover事件
2016/04/17 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
Angular2  NgModule 模块详解
2016/10/19 Javascript
js与jquery分别实现tab标签页功能的方法
2016/11/18 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
JavaScript中捕获/阻止捕获、冒泡/阻止冒泡方法
2016/12/07 Javascript
BootStrap实现鼠标悬停下拉列表功能
2017/02/17 Javascript
react.js 父子组件数据绑定实时通讯的示例代码
2017/09/25 Javascript
JS/CSS实现字符串单词首字母大写功能
2019/09/03 Javascript
js prototype深入理解及应用实例分析
2019/11/25 Javascript
[54:28]EG vs OG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
python类定义的讲解
2013/11/01 Python
Python字符串转换成浮点数函数分享
2015/07/24 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
如何搭建pytorch环境的方法步骤
2020/05/06 Python
如何让PyQt5中QWebEngineView与JavaScript交互
2020/10/21 Python
CSS3 网页下拉菜单代码解释 中文翻译
2010/02/27 HTML / CSS
美国流行背包品牌:JanSport(杰斯伯)
2018/03/02 全球购物
字符串str除首尾字符外的其他字符按升序排列
2013/03/08 面试题
旅游管理专业大学生职业规划书
2014/02/27 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
学校运动会报道稿
2014/09/23 职场文书
2014年驻村干部工作总结
2014/11/17 职场文书
2015年医生个人工作总结
2015/04/25 职场文书
2016三严三实专题教育活动心得体会
2016/01/06 职场文书
MySQL时间设置注意事项的深入总结
2021/05/06 MySQL
springboot利用redis、Redisson处理并发问题的操作
2021/06/18 Java/Android