Я получил ошибку канала проверки, когда я передаю электронную почту и пароль в теле почтальона. - PullRequest
0 голосов
/ 16 апреля 2020

Вот скриншот ошибки:

enter image description here

Вот код DTO:

import {IsString, IsInt,IsEmail,IsNotEmpty, IsNumberString, IsIn} from 'class-validator'

export class logindto{
    @IsEmail()
    username:String

    @IsNotEmpty()
    password:String
}

Вот код контроллера:

@Post('login')
log(@Body('username')username:logindto,@Body('password')password:logindto):any{
    return this.crudservice.loginsys(username,password)
}

Вот код услуг:

export class CrudService {
    constructor(@InjectModel('student') private readonly student:Model<studentmodel>){} 

    async loginsys(username,password):Promise<any>{
            const cred=this.student.findOne({username:username,password:password})
            return cred
    }
}

Вот код модели:

import * as mongoose from 'mongoose'


export const studentschema=new mongoose.Schema({
    name:{type:String,required:true},
    std:{type:Number},
    rollno:{type:Number},
    section:{type:String},
    username:{type:String},
    password:{type:String}
});

export interface studentmodel  extends mongoose.Document{
   readonly name:String,
   readonly std:Number,
   readonly rollno:Number,
   readonly section:string,
   readonly username:string,
   readonly password:string
}

Я уже прошел заголовок данные формы: приложение / x- www-url-form-encoded или приложение / json. Но все еще появляется та же ошибка

1 Ответ

1 голос
/ 16 апреля 2020

Имея строки внутри ваших @Body() декораторов, вы указываете nest найти свойство 'username' req.body, но вы также говорите, что req.body.username должно быть logindto, так что класс-валидатор ожидает найти req.body.username.username и req.body.username.password вместе с req.body.password.username и req.body.password.password. Чтобы исправить это, удалите строки из декоратора @Body(). Если вам нужно получить имя пользователя и пароль отдельно, вы можете использовать деконструкцию объекта, но я бы предложил сделать это вне подписи, в теле метода.

@Post('login')
log(@Body()login:logindto,):any{
    const { username, password } = login; // <-- deconstructing the incoming payload
    return this.crudservice.loginsys(username,password)
}
...