使用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);