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
?
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;
}