Routes 在loopback4中添加请求主体架构

Routes 在loopback4中添加请求主体架构,routes,openapi,strongloop,loopback4,Routes,Openapi,Strongloop,Loopback4,我是loopback 4的新手,我在文档方面遇到了一些困难,这些文档不是最新的。我成功地添加了身份验证系统和登录用户的路径。我的问题是“/explorer”URL,我不知道如何在自定义路由的请求主体架构上添加示例值 这是我的路线: @post('/users/login'{ 答复:{ '200': { 描述:'令牌', 内容:{ “应用程序/json”:{ 模式:{ 类型:“对象”, 特性:{ 代币:{ 键入:“字符串” } } } } } } } }) 异步登录( @requestBody()

我是loopback 4的新手,我在文档方面遇到了一些困难,这些文档不是最新的。我成功地添加了身份验证系统和登录用户的路径。我的问题是“/explorer”URL,我不知道如何在自定义路由的请求主体架构上添加示例值

这是我的路线:

@post('/users/login'{
答复:{
'200': {
描述:'令牌',
内容:{
“应用程序/json”:{
模式:{
类型:“对象”,
特性:{
代币:{
键入:“字符串”
}
}
}
}
}
}
}
})
异步登录(
@requestBody()凭据:凭据,
):承诺{
//确保用户存在,密码应有效
const user=wait this.userService.verifyCredentials(凭证);
//console.log(用户);
const userProfile=wait this.userService.converttoserprofile(用户);
//log(userProfile);
const token=wait this.jwtService.generateToken(userProfile);
返回Promise.resolve({token:token})
}
我想补充一点:

{
“用户名”:“字符串”,
“密码”:“字符串”
}
在这里:


我想有一种简单的方法可以做到这一点,但我真的找不到任何相关信息。

仅供参考:loopback4使用路由装饰器,它提供了OpenAPI规范来描述端点。有关于的详细信息。
现在来解决上述问题。让我们创建:

  • 用户登录模式,即{“用户名”:字符串,“密码”:字符串} 在模式定义中,还可以添加验证规则

    const  UserLoginSchema = {
    type: 'object',
    required: ['email', 'password'],
    properties: {
      username: {
        type: 'string',
      },
      password: {
        type: 'string',
      },
    },
    }; ```
    
  • 现在让我们快速创建用于登录的RequestBody c'tor。请记住,根据OpenApi规范,请求主体将包含描述、必需和内容

  • 现在,您已经准备好使用您的请求主体
    异步登录(
    @requestBody(UserLoginRequestBody)凭据:凭据,
    ):承诺{
    …restCode
    

    这就完成了。

    谢谢@Madaky。在阅读了您的答案后,我只是直接在路径中添加了differents对象,以避免生成额外文件(我不知道这是否是一个好的做法),但它确实有效

    在“@requestBody”函数中添加了最后一个代码和信息:

    
    @post(“/users/login”{
    答复:{
    '200': {
    描述:'令牌',
    内容:{
    “应用程序/json”:{
    模式:{
    类型:“对象”,
    特性:{
    代币:{
    键入:“字符串”
    }
    }
    }
    }
    }
    }
    }
    })
    异步登录(
    //在上面@requestBody内部
    @请求主体(
    {
    description:'登录所需的输入',
    要求:正确,
    内容:{
    “应用程序/json”:{
    模式:{
    类型:“对象”,
    必需:[“电子邮件”,“密码”],
    特性:{
    用户名:{
    键入:“字符串”,
    },
    密码:{
    键入:“字符串”,
    },
    },
    },
    }
    },
    }
    )全权证书:全权证书,
    ):承诺{
    //确保用户存在,密码应有效
    const user=wait this.userService.verifyCredentials(凭证);
    //console.log(用户);
    const userProfile=wait this.userService.converttoserprofile(用户);
    //log(userProfile);
    const token=wait this.jwtService.generateToken(userProfile);
    返回Promise.resolve({token:token})
    }
    

    它工作起来很有魅力,谢谢!

    很高兴听到。继续。要使工作独立,您可以在不同的文件中使用代码。这些文件更容易跟踪,以便以后进行修订
     export const UserLoginRequestBody = {
          description: 'Required input for login',
          required: true,
          content: {
            'application/json': {schema: UserLoginSchema},
          },
        };
    
      async login(
        @requestBody(UserLoginRequestBody) credentials: Credentials,
      ): Promise<{token: string}> {
    ..restCode