# cookie 中间件
cookie 为内置中间件,用于在服务端获取或设置cookie
# 基础使用
import {Sener, Cookie, Router} from 'sener'
const router = new Router({
'/demo': ({ cookie }) => {
const value = cookie.get('test');
cookie.set('test', value+'_tail');
return { data: {value} };
},
});
new Sener({
middlewares: [router, new Cookie()],
});
# 构造函数
Cookie 中间件支持传入一个cookieOptions,用来指定cookie的默认配置项
cookie.get 或 set 方法也可以传入这些配置项,get/set中传入的options会覆盖默认的option
以下为Cookie options的声明
interface ICookieOptions {
value?: any;
expire?: number;
path?: string;
domain?: string; // default: location.host
secure?: boolean; // default: false
sameSite?: ICookieSameSite; // default: Lax
priority?: ICookiePriority; // default: Medium
sameParty?: boolean; // default: false
}
new Cookie({
// ...
})
# cookie api
以下为 context.cookie 对象的类型声明
declare class CookieClient {
private _cookie;
request: IncomingMessage;
response: IResponse;
private _options;
constructor(request: IncomingMessage, response: IResponse, options?: ICookieOptions);
get(key: string): string;
get<T extends string[]>(key: T): {
[prop in keyof T]: string;
};
getResponseCookie(key: string): string;
getResponseCookie<T extends string[]>(key: T): {
[prop in keyof T]: string;
};
set(key: string | Record<string, ICookieValue>, value?: ICookieValue, options?: ICookieOptions): void;
remove(key: string | string[]): void;
expire: typeof countExpire;
}
declare function countExpire(value: string | number): number;
介绍几个主要的方法:
# get方法
get方法用于获取客户端的cookie
使用方式非常简单
cookie.get(name);
// 获取多个cookie
cookie.get([name1, name2])
# set方法
set方法用于设置响应headers中的set-cookie字段,使用方式如下
- 设置单个cookie
cookie.set(name, value);
传入options,options参考 ICookieOptions
cookie.set(name, value, {
// ...
});
- 设置多个cookie
cookie.set({
name: value,
name2: value2
});
传入options,options参考 ICookieOptions
cookie.set({
name: value,
name2: value2
}, {
// ...
});
# remove方法
remove 方法用于删除cookie,使用方式如下
cookie.remove(name);
// 删除多个
cookie.remove([name, name1]);
# expire方法
expire 方法用来计算cookie过期时间
cookie.set(name, value, {
expire: cookie.expire(1000)
})
当 expire 传入 number时,表示 n 毫秒之后过期
当传入 字符串时,可以根据末尾表示表示不同的时间,如 1m 表示一分钟
标识符有以下7中
- s: 秒
- m: 分钟
- h: 小时
- d: 天
- w: 星期
- M: 月
- y: 年
cookie.set(name, value, {
expire: cookie.expire('1d') // 1 天后过期
})
# getResponseCookie方法
getResponseCookie 用于获取设置的cookie,使用方式与 get 方法类似
cookie.getResponseCookie(name);
// 获取多个cookie
cookie.getResponseCookie([name1, name2])
← router: 路由 session →