web-dev-qa-db-fra.com

Pas de métadonnées trouvées pour le validateur de classe

J'essaie d'utiliser un ValidationPipe mais peu importe la façon dont j'écris mon code, je reçois l'avertissement suivant lors de l'envoi d'une demande: No metadata found. There is more than once class-validator version installed probably. You need to flatten your dependencies.

Mon itinéraire ressemble à ceci:

@Get()
@UsePipes(new ValidationPipe({ transform: true }))
async findAll(@Query() queryDto: QueryDto) {
    return await this.myService.findAll(queryDto);
}

Et mon Dto ressemble à quelque chose comme ça:

export class queryDto
{
    @ApiModelProperty({
        description: 'Maximum number of results',
        type: Number,
        example: 50,
        default: 50,
        required: false
    })
    readonly limit: number = 50;
}

J'ai essayé d'utiliser le ValidationPipe plusieurs façons, suivez le doc , mais rien ne fonctionne pour moi. Je sais que cela ne fonctionne pas car, bien que la demande reçoit une réponse, la valeur par défaut que j'ai écrite dans mon DTO pour la propriété limit, qui est 50, n'est pas utilisé lorsque la requête est vide. Par conséquent, lorsque aucun limit est fourni dans la requête, limit 'S est indéfini, alors qu'il devrait être 50 (ce qui signifie que le ValidationPipe n'est pas utilisé).

Mon package.json semble correct:

npm ls class-validator
[email protected] /home/pierre_t/Bureau/dev/ApiSport
└── [email protected]

Plein package.json:

{
  "name": "api-sport",
  "version": "0.0.1",
  "description": "",
  "author": "",
  "license": "MIT",
  "scripts": {
    "build": "tsc -p tsconfig.build.json",
    "format": "prettier --write \"src/**/*.ts\"",
    "start": "ts-node -r tsconfig-paths/register src/main.ts",
    "start:dev": "nodemon",
    "start:debug": "nodemon --config nodemon-debug.json",
    "start:prod": "pm2 start ./src/main.js --no-daemon",
    "lint": "tslint -p tsconfig.json -c tslint.json",
    "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": {
    "@nestjs/common": "^6.0.5",
    "@nestjs/core": "^6.0.5",
    "@nestjs/platform-express": "^6.0.5",
    "@nestjs/swagger": "^3.0.1",
    "@nestjs/typeorm": "^6.0.0",
    "@types/lodash": "^4.14.123",
    "class-transformer": "^0.2.0",
    "class-validator": "^0.9.1",
    "dotenv": "^7.0.0",
    "hbs": "^4.0.3",
    "mysql": "^2.16.0",
    "pm2": "^3.4.1",
    "reflect-metadata": "^0.1.12",
    "rimraf": "^2.6.2",
    "rxjs": "^6.3.3",
    "swagger-ui-express": "^4.0.2",
    "typeorm": "^0.2.16"
  },
  "devDependencies": {
    "@nestjs/testing": "^6.0.5",
    "@types/express": "^4.16.0",
    "@types/jest": "^23.3.13",
    "@types/node": "^10.14.4",
    "@types/supertest": "^2.0.7",
    "jest": "^23.6.0",
    "nodemon": "^1.18.9",
    "prettier": "^1.15.3",
    "supertest": "^3.4.1",
    "ts-jest": "^23.10.5",
    "ts-node": "^7.0.1",
    "tsconfig-paths": "^3.7.0",
    "tslint": "5.12.1",
    "TypeScript": "^3.4.1"
  },
  "jest": {
    "moduleFileExtensions": [
      "js",
      "json",
      "ts"
    ],
    "rootDir": "src",
    "testRegex": ".spec.ts$",
    "transform": {
      "^.+\\.(t|j)s$": "ts-jest"
    },
    "coverageDirectory": "../coverage",
    "testEnvironment": "node"
  }
}

Pourquoi puis-je obtenir ce message et comment puis-je utiliser ValidationPipe?

9
papillon

La question a déjà été répondue, mais pour une référence future des personnes ayant le même problème ...

Le validateur de classe vous permet de contourner la validation de certaines propriétés ( ( Whitelisting ) Drapeaux spéciaux valider toute propriété.

Comme le docs :

Cela éliminera toutes les propriétés qui n'ont pas de décorateurs. Si aucun autre décorateur ne convient à votre propriété, vous pouvez utiliser @ Autoriser Décorateur

par exemple:

import {validate, Allow, Min} from "class-validator";

export class Post {

    @Allow()
    title: string;

    @Min(0)
    views: number;

    nonWhitelistedProperty: number;
}
0
Mathiasfc