NestJS控制器读取Cookie报错:Request类型无cookies属性
问题重现
按照NestJS官方文档编写读取Cookie的控制器代码时,遇到TypeScript类型错误:
import { Controller, Get, Render, Req } from '@nestjs/common'; @Controller() export class AppController { @Get() @Render('home') getHello(@Req() req: Request) { return { text: req.cookies['id'] }; } }
报错信息:
src/app.controller.ts:11:24 - error TS2339: Property 'cookies' does not exist on type 'Request'. 11 return { text: req.cookies['id'] }; ~~~~~~~
直接移除Request类型标注虽然能运行,但会丢失TypeScript的类型安全性。
解决方案
1. 导入Express的Request类型
你当前使用的Request是全局DOM环境的类型,并非Express框架的Request类型。需要从express包中导入正确的类型:
修改控制器代码:
import { Controller, Get, Render, Req } from '@nestjs/common'; // 导入Express的Request类型 import { Request } from 'express'; @Controller() export class AppController { @Get() @Render('home') getHello(@Req() req: Request) { return { text: req.cookies['id'] }; } }
2. 确保已配置cookie-parser中间件
NestJS默认不会自动启用cookie解析,需要在main.ts中注册cookie-parser中间件(如果还没安装,先执行npm install cookie-parser @types/cookie-parser):
import { NestFactory } from '@nestjs/core'; import { AppModule } from './app.module'; import * as cookieParser from 'cookie-parser'; async function bootstrap() { const app = await NestFactory.create(AppModule); // 注册cookie解析中间件 app.use(cookieParser()); await app.listen(3000); } bootstrap();
这样修改后,TypeScript就能正确识别req.cookies属性,同时保留类型安全性。
内容的提问来源于stack exchange,提问作者Qori
相关产品推荐
相关产品推荐

