自定义实现getCookie /setCookie方法

使用http实现服务时,处理cookie是从回调函数的request参数从请求头中获取cookie;

let cookies = querystring.parse(req.headers.cookie, "; ");
res.end(cookies['name']);

通过response参数设置cookie响应头。

res.setHeader('Set-Cookie', ['name=lyra', 'age=18']);

但是操作方法不符合用户的操作习惯。可以通过封装方法实现符合用户习惯的getCookie/setCookie方法。

http.createServer(function(req, res) {
  res.getCookie = function(name) {
    let cookies = querystring.parse(req.headers.cookie, "; ");
    return cookies[name];
  }
  let arr = [];
  res.setCookie = function(key, value, options) { 
    let optionsArr = []; 
    optionsArr.push(`${key}=${value}`)
    if(options.domain) {
      optionsArr.push(`domain=${options.domain}`);
    } 
    if(options.path) {
      optionsArr.push(`path=${options.path}`);
    }
    if(options.maxAge) {
      optionsArr.push(`max-age=${options.maxAge}`);
    }
    if(options.expires) {
      optionsArr.push(`expires=${options.expires}`);
    }
    if(options.httpOnly) {
      optionsArr.push(`httpOnly=${options.httpOnly}`);
    }
    arr.push(optionsArr.join('; '))
    res.setHeader('Set-Cookie', arr);
  }
  if(req.url === '/read') {
    // 使用设置后的方法可以逐条获取
    res.end(res.getCookie('age'));
  }
  if(req.url === '/write') {
    // 使用封装后的方法可以逐条设置
    res.setCookie('name', 'lyra', {path: '/write', httpOnly: true});
    res.setCookie('age', 18, {domain: '.lyra.cn', maxAge: 10});
    res.end('writted');
  }

}).listen(3000);

猜你喜欢

转载自www.cnblogs.com/lyraLee/p/12202825.html