HTTP cookie 是用户浏览器存储的一小段数据。Cookie 旨在成为网站记住状态信息的可靠机制。当用户再次访问该网站时,cookie 会自动随请求一起发送。
安装插件
首先安装所需的包(以及 TypeScript 用户的类型):
$ npm i cookie-parser
$ npm i -D @types/cookie-parser
安装完成后,将 cookie-parser 中间件应用为全局中间件。
async function bootstrap() {const app = await NestFactory.create(AppModule);app.use(cookieParser());await app.listen(3000);
}
bootstrap();
使用 cookie
在响应体中设置 cookie 可以做如下操作:
- secret 用于签署 cookie 的字符串或数组。这是可选的,如果未指定,将不会解析签名的 cookie。如果提供了字符串,则将其用作 secret。如果提供了数组,将尝试按顺序取消对每个 secret 的 cookie 的签名。需要设置
signed
属性。 - options 作为第二个选项传递给 cookie.parse 的对象。
中间件将解析请求上的 Cookie 标头,并将 cookie 数据公开为属性 req.cookies,如果提供了 secret,则公开为属性 req.signedCookies。这些属性是 cookie 名称到 cookie 值的名称值对。
当提供 secret 时,该模块将取消签名并验证任何签名的 cookie 值,并将这些名称值对从 req.cookies 移动到 req.signedCookies 中。签名 cookie 是一个值以 s: 为前缀的 cookie。签名验证失败的签名 cookie 的值将是 false,而不是被篡改的值。
1、请求体中获取 cookie
// 设置了signed属性后,会对cookie进行加密,加密的秘钥就是cookieParser设置的字符串
@Get('/rescookie')
resCookie(@Res({ passthrough: true }) response: Response) {response.cookie('key', '123333', { httpOnly: true, expires: new Date('2023-09-10'), signed: true })
}// 获取请求体中的cookie
@Get()
findAll(@Req() request: Request) {console.log(request.cookies);// console.log(request.signedCookies); // 获取签名的Cookie
}
2、 响应体中返回 cookie
要将 cookie 附加到传出响应,请使用 Response#cookie() 方法:
@Get('/cookie')
findAll(@Res({ passthrough: true }) response: Response) {response.cookie('key', 'demo')
}
说明: response.cookie 的参数有三个,第一个参数是 cookie 的名称,第二个参数是 cookie 的值,第三参数是 cookie 的相关属性值设置,例如设置 cookie 的有效期等属性,具体实例如下:
@Get('/rescookie')
resCookie(@Res({ passthrough: true }) response: Response) {response.cookie('key', 'demo', { httpOnly: true, expires: new Date('2023-09-10') })
}