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 相关文章推荐
无缝滚动改进版支持上下左右滚动(封装成函数)
Dec 04 Javascript
JS+JSP checkBox 全选具体实现
Jan 02 Javascript
jquery特效 点击展示与隐藏全文
Dec 09 Javascript
深入理解AngularJS中的ng-bind-html指令和$sce服务
Sep 08 Javascript
angularjs点击图片放大实现上传图片预览
Feb 24 Javascript
Vue.js组件tab实现选项卡切换
Mar 23 Javascript
JavaScript实现全选取消效果
Dec 14 Javascript
mpvue将vue项目转换为小程序
Sep 30 Javascript
Vue Cli3 创建项目的方法步骤
Oct 15 Javascript
关于自定义Egg.js的请求级别日志详解
Dec 12 Javascript
JavaScript中关于base64的一些事
May 06 Javascript
使用 webpack 插件自动生成 vue 路由文件的方法
Aug 20 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
人工智能开始玩《星际争霸2》 你的操作跟得上吗?
2017/08/11 星际争霸
php实现用户在线时间统计详解
2011/10/08 PHP
PHP与MYSQL中UTF8编码的中文排序实例
2014/10/21 PHP
php实现在线通讯录功能(附源码)
2016/05/13 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
js最简单的拖拽效果实现代码
2010/09/24 Javascript
jQuery :nth-child前有无空格的区别分析
2011/07/11 Javascript
利用js 进行输入框自动匹配字符的小例子
2013/06/29 Javascript
浅析JavaScript中两种类型的全局对象/函数
2013/12/05 Javascript
jQuery实现数字加减效果汇总
2014/12/16 Javascript
nodejs事件的监听与触发的理解分析
2015/02/12 NodeJs
值得分享的Bootstrap Ace模板实现菜单和Tab页效果
2015/12/30 Javascript
使用jQuery实现Web页面换肤功能的要点解析
2016/05/12 Javascript
如何检测JavaScript的各种类型
2016/07/30 Javascript
JS实现的相册图片左右滚动完整实例
2016/11/23 Javascript
BootstrapTable请求数据时设置超时(timeout)的方法
2017/01/22 Javascript
微信小程序自定义导航隐藏和显示功能
2017/06/13 Javascript
jQuery中元素选择器(element)简单用法示例
2018/05/14 jQuery
详解vue服务端渲染浏览器端缓存(keep-alive)
2018/10/12 Javascript
JS前端面试必备——基本排序算法原理与实现方法详解【插入/选择/归并/冒泡/快速排序】
2020/02/24 Javascript
Vue Render函数创建DOM节点代码实例
2020/07/08 Javascript
python中将字典转换成其json字符串
2014/07/16 Python
Python中分数的相关使用教程
2015/03/30 Python
在Python的web框架中配置app的教程
2015/04/30 Python
python实现感知器算法详解
2017/12/19 Python
python语言元素知识点详解
2019/05/15 Python
python pickle存储、读取大数据量列表、字典数据的方法
2019/07/07 Python
python logging.info在终端没输出的解决
2020/05/12 Python
Python rabbitMQ如何实现生产消费者模式
2020/08/24 Python
html5 移动端视频video的android兼容(去除播放控件、全屏)
2020/03/26 HTML / CSS
亿阳信通股份有限公司笔试题(C#)
2016/03/04 面试题
职员竞岗演讲稿
2014/05/14 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
SpringBoot 集成Redis 过程
2021/06/02 Redis
Python学习之包与模块详解
2022/03/19 Python