Codder
Codder

Reputation: 21

NestJs and Mongodb Project: Big problem with [email protected]

I have a problem that really makes me go round in circles since. I try to set up a Nest & Mongo project base to save time for the dev on the mongo NestJs couple. The elements are as follows:

// Package.json

{
  "dependencies": {
    "@nestjs/common": "^10.4.4",
    "@nestjs/config": "^3.2.3",
    "@nestjs/core": "^10.4.4",
    "@nestjs/jwt": "^10.2.0",
    "@nestjs/mapped-types": "^2.0.5",
    "@nestjs/mongoose": "^10.0.10",
    "@nestjs/passport": "^10.0.3",
    "@nestjs/platform-express": "^10.4.4",
    "@nestjs/swagger": "^7.4.2",
    "@nestjs/throttler": "^6.2.1",
    "@types/bcrypt": "^5.0.2",
    "@types/eslint": "^9.6.1",
    "@types/estree": "^1.0.6",
    "bcrypt": "^5.1.1",
    "class-transformer": "0.5.1",
    "class-validator": "^0.14.1",
    "dotenv": "^16.4.5",
    "dotenv-expand": "^11.0.6",
    "express": "^4.21.1",
    "git-cz": "^4.9.0",
    "jsonwebtoken": "^9.0.2",
    "moment": "^2.30.1",
    "mongoose": "^8.7.1",
    "mongoose-tsgen": "^8.4.10",
    "passport": "^0.7.0",
    "passport-jwt": "^4.0.1",
    "reflect-metadata": "^0.1.14",
    "rimraf": "^6.0.1",
    "rxjs": "^7.8.1"
  },
  "devDependencies": {
    "@nestjs/cli": "^7.6.0",
    "@nestjs/schematics": "^7.3.1",
    "@nestjs/testing": "^7.6.18",
    "@types/crypto-random-string": "^2.0.0",
    "@types/express": "^4.17.21",
    "@types/jest": "^26.0.24",
    "@types/jsonwebtoken": "^8.5.9",
    "@types/mongoose": "^5.11.97",
    "@types/node": "^14.18.63",
    "@types/supertest": "^2.0.16",
    "@typescript-eslint/eslint-plugin": "^4.33.0",
    "@typescript-eslint/parser": "^4.33.0",
    "eslint": "^9.12.0",
    "eslint-config-prettier": "^8.10.0",
    "eslint-plugin-prettier": "^3.4.1",
    "install": "^0.13.0",
    "jest": "^26.6.3",
    "mongodb-memory-server": "^6.9.6",
    "mongoose-dummy": "^1.0.8",
    "prettier": "^2.8.8",
    "supertest": "^6.3.4",
    "ts-jest": "^26.5.6",
    "ts-loader": "^8.4.0",
    "ts-node": "^9.1.1",
    "tsconfig-paths": "^3.15.0",
    "typescript": "^4.9.5"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".*\\.spec\\.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "collectCoverageFrom": [
      "**/*.(t|j)s"
    ],
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}

//user.controller.ts

@Controller('users')
export class UsersController {
  constructor(private usersService: UsersService) { }

  @UseGuards(JwtAuthGuard)
  @Get()
  async findAll(
    @Res() res: Response,
    @HeaderDto() headersDto: HeadersDto,
    @QueryDto() getAllFilter: FindAllQueryFilter,
  ): Promise<Response<User[]>> {
    const aggregationResult = await this.usersService.findAll(getAllFilter, headersDto);

    res.header('x-count', String(aggregationResult.count));

    return res.send(aggregationResult.results);
  }
....
 

//users.service.ts

@Injectable()
export class UsersService {
  constructor(@InjectModel(User.name) private userModel: Model<UserDocument>, private readonly tokensService: TokensService,) { }


  async findAll(
    getAllFilter?: FindAllQueryFilter,
    aggregationOptions?: AggregationOptions,
  ): Promise<AggregationResult<User>> {
    return await aggregateBuilder(this.userModel, getAllFilter, aggregationOptions);
  }

//HeaderDTO

import {
    Body,
    createParamDecorator,
    ExecutionContext,
    HttpException,
    HttpStatus,
    Query,
    ValidationPipe,
  } from '@nestjs/common';
import { plainToInstance } from 'class-transformer';
  import { validate, ValidationError } from 'class-validator';
 
  export const BodyDto = (): ParameterDecorator => Body(new ValidationPipe({ transform: true, whitelist: true }));
  export const QueryDto = (): ParameterDecorator => Query(new ValidationPipe({ transform: true, whitelist: true }));
  export const HeaderDto = createParamDecorator(async (value: any, ctx: ExecutionContext) => {
    // extract headers
    const headers = ctx.switchToHttp().getRequest().headers;

    // Convert headers to DTO object
    const dto = plainToInstance(value, headers);

    // Validate
    const errors: ValidationError[] = await validate(dto);
  
    if (errors.length > 0) {
      //Get the errors and push to custom array
      const validationErrors = errors.map((obj) => Object.values(obj.constraints));
      throw new HttpException(`Validation failed with following Errors: ${validationErrors}`, HttpStatus.BAD_REQUEST);
    }
  
    // return header dto object
    return dto;
  })

;

When I do a Get:id, I have no problem, but when it comes to a getAll, I have this problem:

>[Nest] 32901  - 11/10/2024 11:45:21   ERROR [ExceptionsHandler] this.removeListener is not a function
TypeError: this.removeListener is not a function
    at Object.socketOnError [as error] (node:_http_server:867:8)
    at TransformOperationExecutor.transform (/Users/amar/Projects/BASE_PROJECTS/nestjs-template/node_modules/.pnpm/[email protected]/node_modules/class-transformer/cjs/TransformOperationExecutor.js:192:51)
    at TransformOperationExecutor.transform (/Users/amar/Projects/BASE_PROJECTS/nestjs-template/node_modules/.pnpm/[email protected]/node_modules/class-transformer/cjs/TransformOperationExecutor.js:291:43)
    at TransformOperationExecutor.transform (/Users/amar/Projects/BASE_PROJECTS/nestjs-template/node_modules/.pnpm/[email protected]/node_modules/class-transformer/cjs/TransformOperationExecutor.js:291:43)
    at TransformOperationExecutor.transform (/Users/amar/Projects/BASE_PROJECTS/nestjs-template/node_modules/.pnpm/[email protected]/node_modules/class-transformer/cjs/TransformOperationExecutor.js:291:43)
    at ClassTransformer.instanceToPlain (/Users/amar/Projects/BASE_PROJECTS/nestjs-template/node_modules/.pnpm/[email protected]/node_modules/class-transformer/cjs/ClassTransformer.js:13:25)
    at Object.classToPlain (/Users/amar/Projects/BASE_PROJECTS/nestjs-template/node_modules/.pnpm/[email protected]/node_modules/class-transformer/cjs/index.js:22:29)
    at ClassSerializerInterceptor.transformToPlain (/Users/amar/Projects/BASE_PROJECTS/nestjs-template/node_modules/.pnpm/@[email protected][email protected][email protected][email protected][email protected]/node_modules/@nestjs/common/serializer/class-serializer.interceptor.js:56:37)
    at ClassSerializerInterceptor.serialize (/Users/amar/Projects/BASE_PROJECTS/nestjs-template/node_modules/.pnpm/@[email protected][email protected][email protected][email protected][email protected]/node_modules/@nestjs/common/serializer/class-serializer.interceptor.js:49:20)
    at /Users/amar/Projects/BASE_PROJECTS/nestjs-template/node_modules/.pnpm/@[email protected][email protected][email protected][email protected][email protected]/node_modules/@nestjs/common/serializer/class-serializer.interceptor.js:38:54
node:internal/assert:14
    throw new ERR_INTERNAL_ASSERTION(message);
    ^

Error [ERR_INTERNAL_ASSERTION]: This is caused by either a bug in Node.js or incorrect usage of Node.js internals.
Please open an issue with this stack trace at https://github.com/nodejs/node/issues

    at assert (node:internal/assert:14:11)
    at ServerResponse.detachSocket (node:_http_server:294:3)
    at resOnFinish (node:_http_server:988:7)
    at ServerResponse.emit (node:events:519:28)
    at onFinish (node:_http_outgoing:1062:10)
    at callback (node:internal/streams/writable:757:21)
    at afterWrite (node:internal/streams/writable:701:5)
    at afterWriteTick (node:internal/streams/writable:687:10)
    at process.processTicksAndRejections (node:internal/process/task_queues:81:21) {
  code: 'ERR_INTERNAL_ASSERTION'
}


Node.js v21.6.2

You have an idea, besides I reinstalled the packages

Upvotes: 0

Views: 87

Answers (0)

Related Questions