乐闻世界logo
搜索文章和话题

Nestjs 是如何获取请求中的 cookie 的?

4 个月前提问
3 个月前修改
浏览次数21

1个答案

1

在 NestJS 中,您可以通过几种方式来获取请求中的 cookie。其中一种常用的方法是使用 @Req() 装饰器或者 @Request() 裥饰器来注入整个请求对象,然后通过请求对象的 cookies 属性来访问 cookie。以下是一个具体的例子:

typescript
import { Controller, Get, Req } from '@nestjs/common'; import { Request } from 'express'; // NestJS 在内部使用 Express @Controller('example') export class ExampleController { @Get() getCookie(@Req() request: Request): string { const cookies = request.cookies; // 获取所有的 cookie const myCookie = cookies['myCookieName']; // 通过名称访问特定的 cookie return `The value of myCookie is: ${myCookie}`; } }

另一种方法是使用 @Cookies() 装饰器。这是 NestJS 提供的一个定制的装饰器,它可以直接提取请求中的 cookies,您可以选择获取全部的 cookie 或是指定的某个 cookie。例如:

typescript
import { Controller, Get, Cookies } from '@nestjs/common'; @Controller('example') export class ExampleController { @Get() getCookie(@Cookies('myCookieName') myCookie: string): string { // myCookie 参数会直接包含名为 'myCookieName' 的 cookie 的值 return `The value of myCookie is: ${myCookie}`; } }

在这个例子中,@Cookies('myCookieName') 装饰器将会把请求中名为 myCookieName 的 cookie 的值注入到 myCookie 参数中。

如果你的 NestJS 应用没有直接处理 cookies,并且使用了例如 Passport 等第三方库进行身份验证,这些库通常也提供了对 cookies 的抽象处理。例如,你可能会在登录过程中设置一个 session cookie,然后在随后的请求中通过 session 来识别用户。

需要注意的是,为了操作 cookies,你可能需要在 NestJS 中安装并使用中间件,如 cookie-parser,以便在请求对象上正确地解析 cookies:

bash
npm install cookie-parser

然后,在你的主模块或者中间件中配置它:

typescript
import * as cookieParser from 'cookie-parser'; // 在主模块的 configure 方法中 export class AppModule implements NestModule { configure(consumer: MiddlewareConsumer) { consumer .apply(cookieParser()) .forRoutes('*'); // 应用到所有路由 } }

这样做之后,你就可以在控制器中像以上例子一样访问 cookies 了。

2024年6月29日 12:07 回复

你的答案