# @algoan/nestjs-pagination 中文文档

规范地址：https://npmcn.com/package/%40algoan/nestjs-pagination/

版本：6\.0\.2
npm 元数据更新时间：2024-08-27T10:44:29.668Z
中文译文更新时间：2026-11-06T03:13:53.872Z
软件包许可：ISC

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40algoan/nestjs-pagination
原文对照：https://npmcn.com/package/%40algoan/nestjs-pagination/?lang=original
项目主页：https://github.com/algoan/nestjs-components/packages/nestjs-pagination
源码仓库：https://github.com/algoan/nestjs-components

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：34.5 kB，14 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：2 个
- peer 依赖：rxjs \>=7，express \>=4，@nestjs/core \>=7，@nestjs/common \>=7，@nestjs/platform-express \>=7
- 首次发布：2020-01-27T18:14:38.479Z
- 最新版本发布：2023-12-11T09:59:04.288Z
- 近 30 天下载量：5852（2026-10-06 至 2026-11-04，npm 官方下载统计）
- 已发布版本数：44（近 12 个月 0 个）

## 中文简介

NestJS 截取器处理请求的页码

## 安装

```sh
npm install @algoan/nestjs-pagination
```

也可以使用：`pnpm add @algoan/nestjs-pagination`、`yarn add @algoan/nestjs-pagination`、`bun add @algoan/nestjs-pagination`

## README

[![Nest Logo](https://nestjs.com/img/logo_text.svg)](http://nestjs.com/)

A 类 [鸟巢](https://github.com/nestjs/nest) 显示 [链接](https://tools.ietf.org/html/rfc5988) 编辑 [内容范围](https://tools.ietf.org/html/rfc7233#section-4.2) 在响应头.

# NestJS 请求缓冲

一个简单的 NestJS 截取器 抓取查询参数并格式化为 Link Header, 基于 [GitHub 图像](https://developer.github.com/v3/guides/traversing-with-pagination/) (原始内容存档于2017-10-21). pagination API. 此模块使用 [格式-链接-标题](https://github.com/jonathansamines/format-link-header) 节点模块来构建响应链接头.

## 安装

```bash
npm install --save @algoan/nestjs-pagination
```

## 所需资源

-   在此版本上,附有此截取器的API需要返回一个对象:

```json
{
  "totalResources": 1530,
  "resources": [ { ... }, ..., { ... }]
}
```

-   资源必须在截取器构造器中指定

## 限制

-   此模块不考虑返回的 `resources` 属性。 可能与截取器所设置的头部不一致.

## 快速启动

导入 `LinkHeaderInterceptor` 在控制器方法旁边.

```typescript
import { LinkHeaderInterceptor } from '@algoan/nestjs-pagination';
import { Controller, Get, UseInterceptors } from '@nestjs/common';

@Controller()
/**
 * Controller returning a lot of documents
 */
class AppController {
  /**
   * Find all documents
   */
  @UseInterceptors(new LinkHeaderInterceptor({ resource: 'data' }))
  @Get('/data')
  public async findAll(): Promise<{ totalResources: number; resources: DataToReturn[] }> {
    const data: DataToReturn = await model.find(...);
    const count: number = await model.count();

    return { totalResources: count, resources: data };
  }
}
```

例如,如果你有1015个资源 `GET /data?page=4&per_page=100` 将返回 :

```
Content-Range: data 300-399/1015
Link: </data?page=1&per_page=100>; rel="first", </data?page=11&per_page=100>; rel="last", </data?page=5&per_page=100>; rel="next", </data?page=3&per_page=100>; rel="prev"
```

如果您使用MongoDB作为数据库,我们也提供 `ParamDecorator` 您可以将请求转换为mongo查询参数.

```typescript
import { LinkHeaderInterceptor, MongoPaginationParamDecorator, MongoPagination, Pageable } from '@algoan/nestjs-pagination';
import { Controller, Get, UseInterceptors } from '@nestjs/common';

@Controller()
/**
 * Controller returning a lot of documents
 */
class AppController {
  /**
   * Find all documents
   */
  @UseInterceptors(new LinkHeaderInterceptor({ resource: 'data' }))
  @Get('/data')
  public async findAll(@MongoPaginationParamDecorator() pagination: MongoPagination ): Promise<Pageable<DataToReturn>> {
    const data: DataToReturn[] = await model.find(pagination);
    const count: number = await model.count(pagination.filter);

    return { totalResources: count, resources: data };
  }
}
```

## 使用量

默认情况下, 截取器和装饰器会查找查询参数 `page` 财务报告和审定财务报表 `per_page` (默认为100). 您也可以通过传递配置对象来更改这些参数的名称和每页限制的默认值。 注意如果同时使用截取器和装饰器,需要将配置传递给两人.

```typescript
new LinkHeaderInterceptor({ resource: 'data', pageName: '_page', perPageName: 'numberPerPage', defaultLimit: 50 })

@MongoPaginationParamDecorator({ pageName: '_page', perPageName: 'numberPerPage', defaultLimit: 50  })
```

也可以通过使用"PaginationBodyInterceptor"在反应体内得到帕吉能. 通过使用这个截取器,将帕吉能被收录在响应正文中,而不是取出头.

返回已分解的数据响应.

```json
{
  "resources": [],
  "pagination": {
    "next": null,
    "previous": null,
    "first": null,
    "last": null,
    "totalPages": 1,
    "totalResources": 0,
  }
}
```

导入 `PaginationBodyInterceptor` 在控制器方法旁边.

```typescript
import { PaginationBodyInterceptor } from '@algoan/nestjs-pagination';
import { Controller, Get, UseInterceptors } from '@nestjs/common';

@Controller()
/**
 * Controller returning a lot of documents
 */
class AppController {
  /**
   * Find all documents
   */
  @UseInterceptors(new PaginationBodyInterceptor({pageName: 'page', perPageName: 'limit'}))
  @Get('/data')
  public async findAll(@MongoPaginationParamDecorator({pageName: 'page', perPageName: 'limit'}) pagination: MongoPagination): Promise<{ totalResources: number; resources: DataToReturn[] }> {
    const data: DataToReturn = await model.find(...);
    const count: number = await model.count();

    return { totalResources: count, resources: data };
  }
}
```

## 常见问题

### @algoan/nestjs-pagination 是什么？

NestJS 截取器处理请求的页码

### 如何安装 @algoan/nestjs-pagination？

在项目目录运行 npm install @algoan/nestjs-pagination，或使用 pnpm add / yarn add / bun add。它还需要宿主项目提供 peer 依赖：rxjs（\>=7）、express（\>=4）、@nestjs/core（\>=7）、@nestjs/common（\>=7）、@nestjs/platform-express（\>=7）。npm 7 及以上与 pnpm 8 及以上默认会自动安装必需的 peer 依赖，Yarn 需要手动安装。

### @algoan/nestjs-pagination 支持 TypeScript 吗？

支持。包内自带 TypeScript 类型声明（package\.json 声明了 types 入口），安装后即可获得类型提示，无需再安装 @types 包。

### @algoan/nestjs-pagination 支持 ESM 还是 CommonJS？

以 CommonJS 形式发布，可以直接 require\(\)；在 ES Module 项目中也可以用 import 引入（Node\.js 会把 module\.exports 作为默认导出）。

### @algoan/nestjs-pagination 可以商用吗？

@algoan/nestjs-pagination 使用 ISC 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @algoan/nestjs-pagination 的下载量有多少？

根据 npm 官方下载统计，@algoan/nestjs-pagination 在 2026/10/06 – 2026/11/04 这 30 天内被下载 5,852 次，日均约 195 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入，适合横向比较热度，不能直接等同于使用人数。

### @algoan/nestjs-pagination 还在维护吗？

最新版本 6\.0\.2 发布于 2023/12/11（2 年前）；至今共发布 44 个版本，其中过去 12 个月发布了 0 个；首次发布于 2020/01/28。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

