You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

NestJS搭配FastifyAdapter调用res.cookie报not a function错误

报错原因

报错核心原因是框架生态不匹配:

  1. 你当前项目使用Fastify作为HTTP底层框架,而非Express。cookie-parser是Express专属的中间件,无法在Fastify中正常生效,强行通过app.use()挂载不会给响应对象注入Cookie操作方法。
  2. 你从express包引入的Response类型和Fastify实际注入的响应实例(Fastify Reply对象)API完全不一致:Express的响应对象自带cookie()方法,而Fastify原生响应对象没有该方法,调用时自然抛出类型错误。
修复方案
  • 第一步:替换依赖
    先卸载不兼容的Express生态Cookie包,安装Fastify官方维护的Cookie插件:
    npm uninstall cookie-parser @types/cookie-parser
    npm install @fastify/cookie
    
  • 第二步:修改应用初始化逻辑
    删除原来挂载cookieParser的代码,改为注册Fastify官方Cookie插件,注意注册插件需要加await保证加载完成:
    import { NestFactory } from '@nestjs/core';
    import { FastifyAdapter, NestFastifyApplication } from '@nestjs/platform-fastify';
    import fastifyCookie from '@fastify/cookie';
    import { AppModule } from './app.module';
    
    async function bootstrap() {
      const app = await NestFactory.create<NestFastifyApplication>(
        AppModule,
        new FastifyAdapter(),
      );
      // 注册Fastify Cookie插件,替代Express的cookie-parser
      await app.register(fastifyCookie);
      await app.listen(3000);
    }
    bootstrap();
    
  • 第三步:修改接口内的Cookie操作逻辑
    删除从express包引入Response的代码,将响应对象类型替换为Fastify的响应类型,调用Fastify提供的setCookie方法设置Cookie:
    import { Post, Body, ValidationPipe, Res } from '@nestjs/common';
    import { FastifyReply } from 'fastify';
    // 其他业务依赖引入...
    
    @Post('login')
    signIn (
      @Body(ValidationPipe) credentials: Credentials,
      @Res({ passthrough: true }) res: FastifyReply
    ) {
      // Fastify通过setCookie方法设置Cookie,参数顺序为key、value、配置项
      res.setCookie('test', 2, {
        // 可按需配置Cookie属性,例:
        httpOnly: true,
        path: '/',
        maxAge: 24 * 60 * 60 * 1000
      });
      return this.localAuthService.signInUser(credentials);
    }
    

补充说明:如果后续需要读取请求中的Cookie,直接从Fastify请求对象上取request.cookies即可,和Express的使用体验基本一致。

内容的提问来源于stack exchange,提问作者michalgrzegorczyk-dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 23:18:09