Appearance
cookie-parser 源代码导览
项目结构
cookie-parser 的源代码结构:
cookie-parser/
├── lib/
│ └── parse.js # Cookie 解析器
└── index.js # 主入口核心文件
1. index.js - 主入口
主入口文件导出中间件:
javascript
module.exports = cookieParser;2. lib/parse.js - Cookie 解析器
Cookie 解析器的核心逻辑:
javascript
function parse(str, options) {
// 分割 Cookie 字符串
const obj = {};
const pairs = str.split(/; */);
// 解析键值对
pairs.forEach(pair => {
const eq = pair.indexOf('=');
if (eq < 0) return;
const key = pair.substr(0, eq).trim();
const val = pair.substr(eq + 1, pair.length).trim();
// URL 解码
obj[key] = decodeURIComponent(val);
});
return obj;
}关键函数
1. cookieParser() - 中间件
创建中间件函数:
javascript
function cookieParser(secret, options) {
// 返回中间件
return function cookieParserMiddleware(req, res, next) {
// 读取 Cookie 头
const header = req.headers.cookie;
if (!header) {
req.cookies = Object.create(null);
req.signedCookies = Object.create(null);
return next();
}
// 解析 Cookie
req.cookies = parse(header, options);
// 解析签名 Cookie
if (secret) {
req.signedCookies = parseSignedCookies(req.cookies, secret);
}
next();
};
}2. parseSignedCookies() - 解析签名 Cookie
解析签名 Cookie:
javascript
function parseSignedCookies(cookies, secret) {
const signed = Object.create(null);
for (const key in cookies) {
const val = cookies[key];
// 检查签名
if (val.startsWith('s:')) {
const value = val.slice(2);
signed[key] = unsign(value, secret);
}
}
return signed;
}设计模式
1. 中间件模式
遵循 Express 中间件模式:
javascript
function middleware(req, res, next) {
// 中间件逻辑
next();
}2. 工厂模式
中间件函数是工厂函数:
javascript
function cookieParser(secret, options) {
return function middleware(req, res, next) {
// 中间件逻辑
};
}总结
cookie-parser 的源代码简洁而高效,专注于 Cookie 解析功能。理解其源代码有助于我们更好地使用和定制 Cookie 功能。

扫描二维码关注"架构师AI杜"公众号,获取更多技术内容和最新动态
