Метаданные не найдены. Возможно, установлена ​​не одна версия класса-валидатора. Вы должны сгладить свои зависимости - PullRequest
0 голосов
/ 05 марта 2020

, когда я запускаю эту команду curl -vd '{"NickName":"Marry","Password":"pwd"}' -H "Content-type: application/json" http://127.0.0.1:3000/signin, я напечатал No metadata found. There is more than once class-validator version installed probably. You need to flatten your dependencies. на стороне сервера, и validate не работал правильно. Прежде всего, я npm install некоторые зависимости:

npm install --save routing-controllers
npm install --save class-transformer
npm install --save class-validator

Может ли кто-нибудь помочь? Как я могу это исправить? Спасибо!

import { Entity, Column, PrimaryGeneratedColumn, CreateDateColumn, UpdateDateColumn } from 'typeorm';
import { Length } from 'class-validator';
import * as ErrorCode from '../error/errorcode'

@Entity()
export class User {
    @PrimaryGeneratedColumn()
    @Column({
        name: "id"
    })
    Id?: number;

    @Column({
        name: "nickname"
    })
    @Length(1, 20, {
        message: "NickName must be 1 to 20 characters",
        context: {
            errorCode: ErrorCode.ParamLengthNotInRange
        }
    })
    Nickname: string;

    @Column({
        name: "password"
    })
    @Length(6,20)
    Password: string;

    //constructor(input : { Id : number , Nickname: string, Password: string}){
    constructor(input : { Nickname: string, Password: string}){
        //this.Id = input.Id;
        this.Nickname = input.Nickname;
        this.Password = input.Password;
    }

}

import { JsonController, Post, Body, Req } from "routing-controllers";
import { validate, ValidationError } from 'class-validator';
import {User} from '../entity'

@JsonController()
export class UserController {

    @Post('/signin')
    async signin(@Body() user: User) {
        const errors: ValidationError[] = await validate(user)
        if (errors && errors.length > 0) {
            console.log(errors[0].contexts!['Length'].errorCode)
        }
        console.log(user)
        return 'this is signin'
    }
}

1 Ответ

1 голос
/ 30 марта 2020

Вы можете проверить, установлены ли у вас другие версии class-validator, выполнив:

npm ls class-validator

В моем случае я использовал type-graphql и обнаружил, что type-graphql также устанавливал более раннюю версию class-validator. Поэтому я просто понизил версию в пакете. json до более ранней версии, чтобы они соответствовали, затем установил fre sh, и сообщение исчезло.

Надеюсь, это поможет.

...