Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fastify with TypeORM with @Body() undefined #13146

Closed
4 of 15 tasks
trentsgustavo opened this issue Jan 31, 2024 · 7 comments
Closed
4 of 15 tasks

Fastify with TypeORM with @Body() undefined #13146

trentsgustavo opened this issue Jan 31, 2024 · 7 comments

Comments

@trentsgustavo
Copy link

Is there an existing issue for this?

  • I have searched the existing issues

Current behavior

When using NestJS with Fastify and add TypeORM module, the @Body() decorator change to undefined and the body gets empty on Swagger

Minimum reproduction code

https://github.com/trentsgustavo/error-typeorm

Steps to reproduce

1 npm i
2 npm run start:debug
3 Do a request to /auth
4 Open swagger on http://localhost:3001, see empty body on /auth route

Expected behavior

When comment TypeORM Module, @Body() gets data, when uncomment @Body() is undefined

Package

  • I don't know. Or some 3rd-party package
  • @nestjs/common
  • @nestjs/core
  • @nestjs/microservices
  • @nestjs/platform-express
  • @nestjs/platform-fastify
  • @nestjs/platform-socket.io
  • @nestjs/platform-ws
  • @nestjs/testing
  • @nestjs/websockets
  • Other (see below)

Other package

@nestjs/typeorm

NestJS version

10.0.0

Packages versions

{
  "name": "error-type-orm",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "private": true,
  "license": "UNLICENSED",
  "scripts": {
    "build": "nest build",
    "format": "prettier --write \"src/**/*.ts\" \"test/**/*.ts\"",
    "start": "nest start",
    "start:dev": "nest start --watch",
    "start:debug": "nest start --debug --watch",
    "start:prod": "node dist/main",
    "lint": "eslint \"{src,apps,libs,test}/**/*.ts\" --fix",
    "test": "jest",
    "test:watch": "jest --watch",
    "test:cov": "jest --coverage",
    "test:debug": "node --inspect-brk -r tsconfig-paths/register -r ts-node/register node_modules/.bin/jest --runInBand",
    "test:e2e": "jest --config ./test/jest-e2e.json"
  },
  "dependencies": {
    "@fastify/static": "^6.12.0",
    "@nestjs/axios": "^3.0.1",
    "@nestjs/common": "^10.0.0",
    "@nestjs/config": "^3.1.1",
    "@nestjs/core": "^10.0.0",
    "@nestjs/platform-express": "^10.0.0",
    "@nestjs/platform-fastify": "^10.3.1",
    "@nestjs/swagger": "^7.2.0",
    "@nestjs/typeorm": "^10.0.1",
    "class-validator": "^0.14.1",
    "mssql": "^10.0.2",
    "pg": "^8.11.3",
    "reflect-metadata": "^0.1.13",
    "rxjs": "^7.8.1",
    "typeorm": "^0.3.20"
  },
  "devDependencies": {
    "@nestjs/cli": "^10.0.0",
    "@nestjs/schematics": "^10.0.0",
    "@nestjs/testing": "^10.0.0",
    "@types/express": "^4.17.17",
    "@types/jest": "^29.5.2",
    "@types/node": "^20.3.1",
    "@types/supertest": "^2.0.12",
    "@typescript-eslint/eslint-plugin": "^5.59.11",
    "@typescript-eslint/parser": "^5.59.11",
    "eslint": "^8.42.0",
    "eslint-config-prettier": "^8.8.0",
    "eslint-plugin-prettier": "^4.2.1",
    "jest": "^29.5.0",
    "prettier": "^2.8.8",
    "source-map-support": "^0.5.21",
    "supertest": "^6.3.3",
    "ts-jest": "^29.1.0",
    "ts-loader": "^9.4.3",
    "ts-node": "^10.9.1",
    "tsconfig-paths": "^4.2.0",
    "typescript": "^5.1.3"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}

Node.js version

18.19.0

In which operating systems have you tested?

  • macOS
  • Windows
  • Linux

Other

No response

@trentsgustavo trentsgustavo added the needs triage This issue has not been looked into label Jan 31, 2024
@micalevisk
Copy link
Member

micalevisk commented Jan 31, 2024

I managed to reproduce the issue by having the TypeOrmModule class somewhere in the code like this:

image

so it's not a bug on TypeOrmModule itself but rather some circular import introduced by @nestjs/typeorm, I guess 🤔 pretty weird. That happens even if we import that class from '@nestjs/typeorm/dist/typeorm.module'

Also, that isn't related with Fastify adapter. It behaves the same with Express.

I've no ideia on what's happening so far.

@jackbaron
Copy link

I have similar problem

@23431
Copy link

23431 commented Feb 1, 2024

me too, I have similar problem

@kamilmysliwiec
Copy link
Member

Not sure but it sounds like it might be related to the reflect-metadata package #13107 (comment) (incompatibility between versions)?

@micalevisk micalevisk added type: bug 😭 and removed needs triage This issue has not been looked into labels Feb 1, 2024
@micalevisk
Copy link
Member

micalevisk commented Feb 1, 2024

yep, that's due to reflect-metadata.

A quick solution is to pin the version of typeorm to v0.3.19

image

As a general suggestion: be careful when upgrading packages that are under v0, guys. Make sure you're using lock files.

@kamilmysliwiec
Copy link
Member

I'm wondering if we should change the peer dependency restriction of NestJS packages to not allow ^0.2.1 yet (just pin it to 0.1 instead) to avoid packages hoisting

@trentsgustavo
Copy link
Author

Thanks @micalevisk the solution worked for me, in my case was a new project, so i followed the docs. But for sure is always a good practice to lock files

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

5 participants