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中使用hasOwnProperty方法检索ajax响应对象的例子
Dec 08 Javascript
浅谈JavaScript中Date(日期对象),Math对象
Feb 05 Javascript
深入浅析JavaScript中prototype和proto的关系
Nov 15 Javascript
Bootstrap每天必学之日期控制
Mar 07 Javascript
JavaScript的函数式编程基础指南
Mar 19 Javascript
js实现精确到秒的倒计时效果
May 29 Javascript
javascript基本数据类型和转换
Mar 17 Javascript
微信小程序 按钮滑动的实现方法
Sep 27 Javascript
详解angular2 控制视图的封装模式
Dec 27 Javascript
node全局变量__dirname与__filename的区别
Jan 14 Javascript
微信小程序实现页面浮动导航
Jan 28 Javascript
解决vue-router 二级导航默认选中某一选项的问题
Nov 01 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
提问的智慧
2006/10/09 PHP
phpMyAdmin下载、安装和使用入门教程
2007/05/31 PHP
PHP 远程关机实现代码
2009/11/10 PHP
javascript eval函数深入认识
2009/02/21 Javascript
jquery validate使用攻略 第四步
2010/07/01 Javascript
基于jquery实现控制经纬度显示地图与卫星
2013/05/20 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
AngularJS Ajax详解及示例代码
2016/08/17 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
获取IE浏览器Cookie信息的方法
2017/01/23 Javascript
JS加密插件CryptoJS实现的DES加密示例
2018/08/16 Javascript
JS实现移动端在线签协议功能
2019/08/22 Javascript
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
Python datetime时间格式化去掉前导0
2014/07/31 Python
python3+PyQt5自定义视图详解
2018/04/24 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
计算机二级python学习教程(2) python语言基本语法元素
2019/05/16 Python
Python正则表达式匹配日期与时间的方法
2019/07/07 Python
python pyg2plot的原理知识点总结
2021/02/28 Python
全球知名提供各类营养保健品的零售商:Vitamin Shoppe
2016/10/09 全球购物
eDreams意大利:南欧领先的在线旅行社
2018/11/23 全球购物
Linux的主要特性
2014/10/06 面试题
优秀英语专业毕业生求职信
2013/11/23 职场文书
给孩子的新年寄语
2014/04/08 职场文书
党章培训心得体会
2014/09/04 职场文书
大学生撤销处分思想汇报
2014/09/12 职场文书
师德师风剖析材料
2014/09/30 职场文书
2014年生活老师工作总结
2014/12/23 职场文书
刘公岛导游词
2015/02/05 职场文书
2015年度个人业务工作总结
2015/04/27 职场文书
换届选举主持词
2015/07/03 职场文书
开学第一周值周总结
2015/07/16 职场文书
2016入党心得体会范文
2016/01/06 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
MySQL5.7并行复制原理及实现
2021/06/03 MySQL
javascript进阶篇深拷贝实现的四种方式
2022/07/07 Javascript