🦄 2024 独立开发者训练营,一起创业!查看介绍 / 立即报名(剩余10个优惠名额) →

NNC D14:排序与分页

D14 去实现的内容列表的排序与分页功能。在用 TypeOrm 提供的方法查询出内容列表的时候,查询用的方法可以先去创建一个 QueryBuilder,然后用 take 方法设置一下每次返回的列表项目数量,用 skip 可以设置跳过的项目数量。

    queryBuilder
      .take(limit)
      .skip(limit * (page - 1));

这种分页内容的方法需要两个变量,一个是每页显示的列表数量,还有一个是当前的页码。这两个变量可以动态得到值,比如它们可以来自地址查询符。在 Nest.js 应用里,可以创建一个自定义的参数装饰器,去获取到请求地址里的查询参数的值。

export const ListOptions = createParamDecorator((data: Partial<ListOptionsInterface> = {}, req) => {
  let { page, limit } = req.query;
  ...
}

分页内容还有一个关键是得到总共的结果数量,使用 QueryBuilder 上的 getManyAndCount 这个方法可以返回查询结果还有结果数量。

queryBuilder.getManyAndCount()

用上面的这个方法返回的查询结果可以使用一个拦截器转换一下,可以把结果数量放在一个自定义的头部信息里,这样前端或移动端应用可以读取这个头部信息的值,去实现分页功能。

return next.handle()
      .pipe(
        map(
          data => {
            const [entities, total] = data;
            request.res.header('X-Total-Count', total);
            return entities;
          }
        )
      );

排序

对结果按某种条件排序可以使用一下 orderBy 方法,设置排序的条件还有排序的方法(升序或降序)。

    queryBuilder
      .orderBy({
        [`post.${sort}`]: order
      });
微信好友

用微信扫描二维码,
加我好友。

微信公众号

用微信扫描二维码,
订阅宁皓网公众号。

240746680

用 QQ 扫描二维码,
加入宁皓网 QQ 群。

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点