zoukankan      html  css  js  c++  java
  • [cookie篇]从cookie-parser中间件说起

    之前加入了一个学习笔记本群,通过学习笔记来分享学习成果。也在这里发一份吧。

     * 难得第一次发首页,还不给上。那一些hello world的都能上。好歹是我自己研究过的,太不尊重人了。

    当我们在写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。我们在下次再看这个文件到底是做什么用的吧。
     
    http://www.cnblogs.com/coolicer/p/4191551.html
  • 相关阅读:
    HDU 3401 Trade
    POJ 1151 Atlantis
    HDU 3415 Max Sum of MaxKsubsequence
    HDU 4234 Moving Points
    HDU 4258 Covered Walkway
    HDU 4391 Paint The Wall
    HDU 1199 Color the Ball
    HDU 4374 One hundred layer
    HDU 3507 Print Article
    GCC特性之__init修饰解析 kasalyn的专栏 博客频道 CSDN.NET
  • 原文地址:https://www.cnblogs.com/coolicer/p/4191548.html
Copyright © 2011-2022 走看看