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代码
Apr 22 Javascript
JavaScript修改浏览器tab标题小技巧
Jan 06 Javascript
javascript数据结构之二叉搜索树实现方法
Nov 25 Javascript
实现easyui的datagrid导出为excel的示例代码
Nov 10 Javascript
Vue.js实战之通过监听滚动事件实现动态锚点
Apr 04 Javascript
浅谈JS对html标签的属性的干预以及对CSS样式表属性的干预
Jun 25 Javascript
Angular利用内容投射向组件输入ngForOf模板的方法
Mar 05 Javascript
JavaScript设计模式之工厂模式简单实例教程
Jul 03 Javascript
vue+koa2实现session、token登陆状态验证的示例
Aug 30 Javascript
微信小程序select下拉框实现源码
Nov 08 Javascript
JQuery常用选择器功能与用法实例分析
Dec 23 jQuery
微信小程序实现录制、试听、上传音频功能(带波形图)
Feb 27 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
海贼王:最美的悬赏令!
2020/03/02 日漫
php feof用来识别文件末尾字符的方法
2010/08/01 PHP
给WordPress中的留言加上楼层号的PHP代码实例
2015/12/14 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
Thinkphp框架+Layui实现图片/文件上传功能分析
2020/02/07 PHP
javascript Split方法,indexOf方法、lastIndexOf 方法和substring 方法
2009/03/21 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
Jquery uploadify图片上传插件无法上传的解决方法
2013/12/16 Javascript
JS实现div居中示例
2014/04/17 Javascript
在AngularJS中使用AJAX的方法
2015/06/17 Javascript
AngularJS实现树形结构(ztree)菜单示例代码
2016/09/18 Javascript
angularjs实现首页轮播图效果
2017/04/14 Javascript
angularjs中的$eval方法详解
2017/04/24 Javascript
JS实现二维数组横纵列转置的方法
2018/04/17 Javascript
js中获取URL参数的共用方法getRequest()方法实例详解
2018/10/24 Javascript
angular4笔记系列之内置指令小结
2018/11/09 Javascript
js中call()和apply()改变指针问题的讲解
2019/01/17 Javascript
推荐一个基于Node.js的表单验证库
2019/02/15 Javascript
微信小程序中weui用法解析
2019/10/21 Javascript
vue组件创建的三种方式小结
2020/02/03 Javascript
Python获取文件所在目录和文件名的方法
2017/01/12 Python
对python 各种删除文件失败的处理方式分享
2018/04/24 Python
启动Atom并运行python文件的步骤
2018/11/09 Python
Django+Xadmin构建项目的方法步骤
2019/03/06 Python
用Python实现校园通知更新提醒功能
2019/11/23 Python
Python实现Word表格转成Excel表格的示例代码
2020/04/16 Python
python 实现图片批量压缩的示例
2020/12/18 Python
python字典与json转换的方法总结
2020/12/28 Python
HTML5 Canvas——用路径描画线条实例介绍
2013/06/09 HTML / CSS
Html5嵌入钉钉的实现示例
2020/06/04 HTML / CSS
介绍一下EJB的分类及其各自的功能及应用
2016/08/23 面试题
技术总监的工作职责
2013/11/13 职场文书
探亲邀请信范文
2014/01/30 职场文书
纪检监察建议书
2014/05/19 职场文书
2016新年致辞
2015/08/01 职场文书
vue点击弹窗自动触发点击事件的解决办法(模拟场景)
2021/05/25 Vue.js