express中cookie的使用和cookie-parser的

2018-01-29  本文已影响0人  布拉德皮蛋_qzy

最近在研究express,学着使用cookie,开始不会用,就百度了一下,没有百度到特别完整的解答。查阅了express的API,综合了网友的博客,解读了cookie-parser的源码,以及使用WebStorm和Chrome验证,终于明白了express中cookie的使用。顾此篇文章即是分享也是总结。

1. cookie的创建

express直接提供了api,只需要在需要使用的地方调用如下api即可


    function(req, res, next){
        ...
        res.cookie(name, value [, options]);
        ...
    }

express就会将其填入Response Header中的Set-Cookie,达到在浏览器中设置cookie的作用。

[图片上传失败...(image-a57d79-1517212254735)]

用例如下

res.cookie('name', 'koby', { domain: '.example.com', path: '/admin', secure: true });
//cookie的有效期为900000ms
res.cookie('rememberme', '1', { expires: new Date(Date.now() + 900000), httpOnly: true });
//cookie的有效期为900000ms
res.cookie('rememberme', '1', { maxAge: 900000, httpOnly: true });

//cookie的value为对象
res.cookie('cart', { items: [1,2,3] });
res.cookie('cart', { items: [1,2,3] }, { maxAge: 900000 });

res.cookie('name', 'tobi', { signed: true });

2.cookie的删除
express直接提供了api删除浏览器中的cookie,只需要在需要使用的地方调用如下api即可


    function(req, res, next){
        ...
        res.clearCookie(name [, options]);
        ...
    }

3.利用cookie-parser读取cookie
cookie-parser是一个非常好用方便的插件,可以直接用在express和connect中,官文地址为https://www.npmjs.com/package/cookie-parser。npm安装命令

$npm install cookie-parser --save

使用方式

var express = require('express');
var cookieParser = require('cookie-parser');

var app = express();
//不使用签名
app.use(cookiePareser());

//若需要使用签名,需要指定一个secret,字符串,否者会报错
app.use(cookiePareser('Simon'));

    //./lib/parse.js
    var signature = require('cookie-signature');

    exports.signedCookies = function(obj, secret){
      var cookies = Object.keys(obj);    //获取obj对象的property
      var dec;
      var key;
      var ret = Object.create(null);  //创建返回对象
      var val;

      for (var i = 0; i < cookies.length; i++) {
        key = cookies[i];
        val = obj[key];
        dec = exports.signedCookie(val, secret);

        //判断是否是去掉签名后的value,如果是保存该值到ret中同时删除obj中的相应property
        if (val !== dec) {
          ret[key] = dec;
          delete obj[key];
        }
      }

      return ret;
    };

    exports.signedCookie = function(str, secret){
        //判断是否添加了签名,如果添加了签名则去掉签名,否则返回原字符串
      return str.substr(0, 2) === 's:' 
        ? signature.unsign(str.slice(2), secret)
        : str;
    };

综上所诉,解析后的unsigned cookie保存在req.cookies中,而解析后的signed cookie只保存在req.signedCookies中。使用cookie-parser插件,后续代码直接使用req.cookies或者req.signedCookies即可

上一篇 下一篇

猜你喜欢

热点阅读