Добавить схему тела запроса в loopback4 - PullRequest
0 голосов
/ 29 мая 2020

Я новичок в loopback 4, и у меня действительно возникли трудности с документацией, которая некоторое время не обновляется. Мне удалось добавить систему аутентификации и маршрут для входа в систему. Моя проблема связана с URL-адресом «/ explorer», я не знаю, как добавить примерное значение в схему тела запроса пользовательского маршрута.

Вот мой маршрут:

@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})
  }

И я sh добавляю:

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

Здесь: /explorer url

Я полагаю, что есть простой способ сделать это, но я действительно ничего не могу найти об этом.

Ответы [ 2 ]

1 голос
/ 29 мая 2020

FYI: loopback4 использует декоратор маршрута, который предоставляет спецификацию OpenAPI для описания конечной точки. Подробное описание декоратора OpenAPI в loopbac4 можно найти здесь . Теперь решим вышеуказанный вопрос. позволяет создать:

  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},
      },
    };
Теперь вы готовы использовать тело запроса.
  async login(
    @requestBody(UserLoginRequestBody) credentials: Credentials,
  ): Promise<{token: string}> {
..restCode

Вот и готово.

0 голосов
/ 29 мая 2020

Спасибо @Madaky. Прочитав ваш ответ, я просто добавил объект different прямо в свой маршрут, чтобы не создавать дополнительные файлы (я не знаю, хорошая ли это практика), но он работает.

Вот окончательный код с информацией добавлено в функцию "@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})
  }

Работает как шарм, спасибо!

...