Пример LoopBack 4 REST API для получения записи с помощью Mysql - PullRequest
0 голосов
/ 10 апреля 2019

я учусь loopback 4 , я создал модель, хранилище и источник данных, он также подключен в MySQL и я могу получить результаты от http://127.0.0.1:3000/myapi/{id}

в моем примере по умолчанию получение по идентификатору:

@get('/citySchedule/{id}', {
    responses: {
      '200': {
        description: 'Schedule model instance',
        content: {'application/json': {schema: {'x-ts-type': Schedule}}},
      },
    },
  })
  async findById(@param.path.number('id') id: number): Promise<Schedule> {
    return await this.ScheduleRepository.findById(id);
  }

Однако я не нашел ни одного учебника по получению данных с большим количеством параметров.

допустим, что таблица mysql schedule содержит столбец id, city_name, city_code, date, task, item.

например, я хочу получить "SELECT task, item FROM schedule WHERE city_code=123 AND date=2019-05-01"

мой вопрос, как написать код для получения этих данных в loopback controller ? любой пример кода ...

мои ожидания, я могу запросить из моего API:

http://127.0.0.1:3000/myapi/{city_code}/{date}/ для получения результатов данных или

http://127.0.0.1:3000/myapi/{city_name}/{date}/

1 Ответ

1 голос
/ 11 апреля 2019

Если вы сгенерировали свой контроллер с помощью loopback cli, у вас должен быть другой метод в классе контроллера, подобный этому

@get('/citySchedule', {
    responses: {
      '200': {
        description: 'Array of Schedule model instances',
        content: {
          'application/json': {
            schema: {type: 'array', items: {'x-ts-type': Schedule}},
          },
        },
      },
    },
  })
  async find(
    @param.query.object('filter', getFilterSchemaFor(Schedule)) filter?: Filter,
  ): Promise<Schedule[]> {
    return await this.ScheduleRepository.find(filter);
  }

Вы можете использовать этот API для получения более отфильтрованных данных.

Учитывая ваш пример

Задача SELECT, элемент ИЗ расписания, ГДЕ city_code = 123 И дата = 2019-05-01

для этого запроса, вам нужно использовать API какthis.

GET /citySchedule?filter=%7B%22where%22%3A%7B%22city_code%22%3A123%2C%22date%22%3A%222019-05-01%22%7D%2C%22fields%22%3A%7B%22task%22%3Atrue%2C%22item%22%3Atrue%7D%7D

Здесь значение параметра запроса фильтра на самом деле является строкой в ​​кодировке URL для приведенной ниже строки json

{
    "where":{
        "city_code":123,
        "date":"2019-05-01"
    },
    "fields":{
        "task":true,
        "item":true
    }
}
...