【问题标题】:I got a validation pipe's error when am passing email and password in the body of the postman在邮递员正文中传递电子邮件和密码时出现验证管道错误
【发布时间】:2020-07-29 23:32:30
【问题描述】:

这是错误截图:

这是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
}

我已经通过了表单数据的标题:application/x-www-url-form-encoded 或 application/json。但仍然得到同样的错误

【问题讨论】:

    标签: typescript validation pipe postman nestjs


    【解决方案1】:

    通过在您的@Body() 装饰器中包含字符串,您告诉nest 找到req.body'username' 属性,但您也说req.body.username 应该是logindto,所以类验证器期望找到req.body.username.usernamereq.body.username.password 以及req.body.password.usernamereq.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)
    }
    

    【讨论】:

    • 我试过你的方法,但我得到了错误: CastError: Cast to string failed for value "{ username: 'xyz20@test.com', password: 'xyz@1234' }" at path "模型“学生”的密码”
    • modelstudent和这个有什么关系?这听起来像是一个完全不同的问题
    • 我添加了我的架构和模型的代码,并更新了我的服务代码,如何使用 studentmodel
    • 我仍然不知道您对我的建议做了什么,以及现在失败的地方。你有没有使用任何解构?你还在使用多个@Body() 装饰器吗?您是否检查了控制器或服务中的用户名和密码的值?
    • 我只是删除了我在@Body() 装饰器中编写的“用户名”和“密码”。是的,我使用多个@Body() 装饰器作为我的用户名和密码,我是这样写的@Body()username:logindto,@Body()password:logindto 像这样。我的主要目的是使用验证管道作为用户名和密码。当我应用验证管道时,我得到了我在问题中提到的错误。当我删除管道我得到了想要的输出。我的问题是当我应用管道时我没有得到想要的输出
    猜你喜欢
    • 1970-01-01
    • 2020-06-17
    • 2017-01-30
    • 2018-02-23
    • 2015-02-15
    • 1970-01-01
    • 2020-06-03
    • 2012-07-07
    • 2018-05-26
    相关资源
    最近更新 更多