首页 > 解决方案 > 如何在@get 端点中执行分页

问题描述

如果我的表中有大量记录(数百万);我怎样才能按GET要求对它们进行分页?

LoopBack 4官方控制示例不模拟这种情况。我找不到任何关于真实案例解决方案的参考(他们提到了跳过过滤器中的分页示例,但没有提到如何将其与存储库方法一起使用。find())。

你有那个案例的例子或片段吗?

编辑(我看到有人投票关闭这个问题):这个问题的主要原因是防止前端开发人员通过调用巨大的查询来犯任何错误可能会影响服务器性能(以防她/他忘记使用skip&limit过滤器)。

标签: node.jstypescriptloopbackjsloopback4

解决方案


模拟分页的一种方法是强制执行limit过滤器。

LoopBack 4 可以使用模型范围永久链接)为您处理此问题:

@model({
  settings: {
    scope: {
      limit: 50,
    },
  },
})
class MyModel extends Entity {/* ... */}

要将范围仅应用于少数几个端点,Controller可以在将过滤器传递给 Repository 函数之前对其进行修改:

class MyController {
  @get('/')
  async find(
    @param.filter(MyModel) filter?: Filter<MyModel>
  ): Promise<MyModel[]> {
    const sanitizedFilter = Object.assign(filter, {limit: 50});
    return this.myRepository.find(sanitizedFilter);
  }
}

这两个示例执行相同的操作:对一个请求中可以查询的最大项目数实施限制。

要获取接下来的 50 个项目,API 使用者可以skip在他们的查询中添加一个过滤器以获取下一个“页面”:

?filter={skip: 50}

推荐阅读