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 相关文章推荐
Prototype使用指南之string.js
Jan 10 Javascript
Javascript表达式中连续的 && 和 || 之赋值区别
Oct 17 Javascript
jQuery编辑器KindEditor4.1.4代码高亮显示设置教程
Mar 01 Javascript
将查询条件的input、select清空
Jan 14 Javascript
javascript中callee与caller的区别分析
Apr 20 Javascript
JavaScript评论点赞功能的实现方法
Mar 13 Javascript
对Angular中单向数据流的深入理解
Mar 31 Javascript
JavaScript实现多张图片放大镜效果示例【不限定图片尺寸,rem单位】
May 14 Javascript
详解Vue 项目中的几个实用组件(ts)
Oct 29 Javascript
vue 获取url里参数的两种方法小结
Nov 12 Javascript
Vue vee-validate插件的简单使用
Jun 22 Vue.js
vue3使用vuedraggable实现拖拽功能
Apr 06 Vue.js
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
Codeigniter实现处理用户登录验证后的URL跳转
2014/06/12 PHP
php常用表单验证类用法实例
2015/06/18 PHP
PHP常用字符串操作函数实例总结(trim、nl2br、addcslashes、uudecode、md5等)
2016/01/09 PHP
PHP中利用sleep函数实现定时执行功能实现代码
2016/08/25 PHP
innerhtml用法 innertext用法 以及innerHTML与innertext的区别
2009/10/26 Javascript
jQuery插件原来如此简单 jQuery插件的机制及实战
2012/02/07 Javascript
js的touch事件的实际引用
2014/10/13 Javascript
AngularJS中的模块详解
2015/01/29 Javascript
jQuery实现在textarea指定位置插入字符或表情的方法
2015/03/11 Javascript
node.js读取文件到字符串的方法
2015/06/29 Javascript
require.js的用法详解
2015/10/20 Javascript
jQuery简易时光轴实现方法示例
2017/03/13 Javascript
JavaScript模块化之使用requireJS按需加载
2017/04/12 Javascript
AngularJS 异步解决实现方法
2017/06/12 Javascript
vue的事件绑定与方法详解
2017/08/16 Javascript
vue 添加vux的代码讲解
2017/11/30 Javascript
jQuery实现form表单序列化转换为json对象功能示例
2018/05/23 jQuery
vue cli3.0 引入eslint 结合vscode使用
2019/05/27 Javascript
javascript实现简易的计算器
2020/01/17 Javascript
swiper4实现移动端导航栏tab滑动切换
2020/10/16 Javascript
深入理解NumPy简明教程---数组1
2016/12/17 Python
详解Python中如何写控制台进度条的整理
2018/03/07 Python
Python实现的简单计算器功能详解
2018/08/25 Python
pygame游戏之旅 调用按钮实现游戏开始功能
2018/11/21 Python
python可视化 matplotlib画图使用colorbar工具自定义颜色
2020/12/07 Python
linux系统下pip升级报错的解决方法
2021/01/31 Python
大学生职业生涯规划书的基本内容
2014/01/06 职场文书
会计师职业生涯规划范文
2014/02/18 职场文书
公务员党的群众路线教育实践活动学习心得体会
2014/10/30 职场文书
小浪底导游词
2015/02/12 职场文书
护士求职简历自我评价
2015/03/10 职场文书
社区义诊通知
2015/04/24 职场文书
交心谈心活动总结
2015/05/11 职场文书
找规律教学反思
2016/02/23 职场文书
担保书怎么写 ?
2019/04/22 职场文书
Spring Boot DevTools 全局配置学习指南
2022/03/31 Java/Android