【问题标题】:LoopBack 4 REST API example for getting record with Mysql使用 Mysql 获取记录的 LoopBack 4 REST API 示例
【发布时间】:2019-08-31 17:19:46
【问题描述】:

我正在学习loopback 4,我已经创建了模型、存储库和数据源,它也连接了 到mysql,我可以从http://127.0.0.1:3000/myapi/{id}检索结果

在我通过 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);
  }

但是,我没有找到任何获取更多参数数据的教程。

假设schedule的mysql表包含idcity_namecity_codedatetaskitem列。

例如,我想得到"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}/

【问题讨论】:

    标签: mysql node.js typescript loopbackjs strongloop


    【解决方案1】:

    如果你使用 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 task, item FROM schedule WHERE city_code=123 AND 日期=2019-05-01

    对于这个查询,你需要像这样点击 API。

    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
    

    这里的filter查询参数值其实就是下面json字符串的url编码字符串

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

    【讨论】:

    • 您好,感谢您的回答。但是我们不能在不使用过滤器的情况下创建它,而是使用像 http://127.0.0.1:3000/myapi/{city_code}/{date}/ 这样的 url 吗?
    • 是的,您可以,但为此您可能需要在控制器方法中添加一些自定义处理。如果你真的需要,我也可以分享它
    猜你喜欢
    • 1970-01-01
    • 2017-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多