在 loopback4 中添加 Request body Schema

Add Request body Schema in loopback4

我是 loopback 4 的新手,我真的很难理解一段时间未更新的文档。我成功地添加了一个身份验证系统和一个登录用户的路由。我的问题出在“/explorer”URL,我不知道如何在自定义路由的请求正文架构中添加示例值。

这是我的路线:

@post('/users/login', {
    responses: {
      '200': {
        description: 'Token',
        content: {
          'application/json': {
            schema: {
              type: 'object',
              properties: {
                token: {
                  type: 'string'
                }
              }
            }
          }
        }
      }
    }
  })
  async login(
    @requestBody() credentials: Credentials,
  ): Promise<{token: string}> {
    // make sure user exist,password should be valid
    const user = await this.userService.verifyCredentials(credentials);
    // console.log(user);
    const userProfile = await this.userService.convertToUserProfile(user);
    // console.log(userProfile);

    const token = await this.jwtService.generateToken(userProfile);
    return Promise.resolve({token: token})
  }

我想补充:

{
   "username": "string",
   "password": "string"
}

这里:

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

仅供参考:loopback4 使用路由装饰器,它提供 OpenAPI 规范来描述端点。关于OpenAPI decorator in loopbac4 here.
有详细介绍 现在解决上面的问题。让我们创建:

  1. 用户登录模式即 {"username":string, "password":string} 在架构定义中,您还可以添加验证规则。

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

 export const UserLoginRequestBody = {
      description: 'Required input for login',
      required: true,
      content: {
        'application/json': {schema: UserLoginSchema},
      },
    };
  1. 现在您可以使用您的请求正文了。
  async login(
    @requestBody(UserLoginRequestBody) credentials: Credentials,
  ): Promise<{token: string}> {
..restCode

到此为止。

谢谢@Madaky。阅读您的回答后,我只是直接在我的路线中直接添加了 differents 对象,以不制作额外的文件(我不知道这是否是一个好习惯)但它有效。

在“@requestBody”函数中添加了信息的最终代码:


  @post('/users/login', {
    responses: {
      '200': {
        description: 'Token',
        content: {
          'application/json': {
            schema: {
              type: 'object',
              properties: {
                token: {
                  type: 'string'
                }
              }
            }
          }
        }
      }
    }
  })
  async login(
    //here above inside @requestBody
    @requestBody(
      {
        description: 'Required input for login',
        required: true,
        content: {
          'application/json': {
            schema: {
              type: 'object',
              required: ['email', 'password'],
              properties: {
                username: {
                  type: 'string',
                },
                password: {
                  type: 'string',
                },
              },
            },
          }
        },
      }
    ) credentials: Credentials,
  ): Promise<{token: string}> {
    // make sure user exist,password should be valid
    const user = await this.userService.verifyCredentials(credentials);
    // console.log(user);
    const userProfile = await this.userService.convertToUserProfile(user);
    // console.log(userProfile);

    const token = await this.jwtService.generateToken(userProfile);
    return Promise.resolve({token: token})
  }

效果很好,谢谢!