# @applifting-io/nestjs-dataloader 中文文档

规范地址：https://npmcn.com/package/%40applifting-io/nestjs-dataloader/

版本：1\.1\.6
npm 元数据更新时间：2025-09-22T07:28:38.887Z
中文译文更新时间：2026-11-08T14:42:23.685Z
软件包许可：MIT

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

原始 npm 页面：https://www.npmjs.com/package/%40applifting-io/nestjs-dataloader
原文对照：https://npmcn.com/package/%40applifting-io/nestjs-dataloader/?lang=original
项目主页：https://github.com/Applifting/nestjs-dataloader#readme
源码仓库：https://github.com/Applifting/nestjs-dataloader

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

- 包体积（解压后）：16.2 kB，9 个文件
- 模块格式：CommonJS
- TypeScript 类型：包内自带
- 运行依赖：3 个
- 首次发布：2023-11-06T17:52:09.728Z
- 最新版本发布：2025-09-22T07:28:38.681Z
- 近 30 天下载量：1779（2026-10-07 至 2026-11-05，npm 官方下载统计）
- 已发布版本数：7（近 12 个月 0 个）

## 中文简介

数据装入器的 NestJS 装饰器

## 安装

```sh
npm install @applifting-io/nestjs-dataloader
```

也可以使用：`pnpm add @applifting-io/nestjs-dataloader`、`yarn add @applifting-io/nestjs-dataloader`、`bun add @applifting-io/nestjs-dataloader`

## README

# NestJS 数据载入器

![Node.js CI](https://github.com/Applifting/nestjs-dataloader/workflows/Node.js%20CI/badge.svg) [![Coverage Status](https://coveralls.io/repos/github/Applifting/nestjs-dataloader/badge.svg?branch=master)](https://coveralls.io/github/krislefeber/nestjs-dataloader?branch=master)

NestJS 数据装载器简化添加 [图表ql/数据加载器](https://github.com/graphql/dataloader) 到你的巢穴JS项目。 DataLoader旨在解决常见的N+1加载问题.

这是krislefeber/nestjs-dataloader的叉子,有以下变化:

-   在接口中将生成DataLoader方法替换为 getBatchFunction, 减少从数据装入包中导入任何内容的需要并简化代码
-   已添加 `sortDataLoaderResultsByKey` 方便方法,因为一些批量方法可以使用(例如: `SELECT * IN (...)`)不保证返回结果的顺序与所提供的密钥的顺序相匹配,这对数据装入器正常工作至关重要
-   将所有依赖性更新到最新版本

## 安装

```bash
npm i @applifting-io/nestjs-dataloader
```

## 使用量

### NestData Loader 创建

我们首先执行 `NestDataLoader` 接口。 这说明 `DataLoader` 如何装入我们的物体.

```typescript
import { Injectable } from '@nestjs/common';
import { NestDataLoader, DataLoaderBatchFunction } from '@applifting-io/nestjs-dataloader';
...

@Injectable()
export class AccountLoader implements NestDataLoader<string, Account> {
  constructor(private readonly accountService: AccountService) { }

  getBatchFunction(): DataLoaderBatchFunction<string, Account> {
    return (keys: string[]) => {
      const results = await this.accountService.findByIds(keys);
      return sortDataLoaderResultsByKey(keys, results, "id");
    };
  }
}
```

界面的第一个通用是数据存储器使用的ID类型. 第二个通称是返回对象的类型. 在上述情况下,我们希望 `DataLoader` 返回实例 `Account` 课.

### 提供 NestData 记录器

对于我们创建的NestDataLoader, 我们需要提供它的模块.

```typescript
import { Module } from '@nestjs/common';
import { APP_INTERCEPTOR } from '@nestjs/core';
import { DataLoaderInterceptor } from 'nestjs-dataloader'
...

@Module({
  providers: [
    AccountResolver,
    AccountLoader,
    {
      provide: APP_INTERCEPTOR,
      useClass: DataLoaderInterceptor,
    },
  ],

})
export class ResolversModule { }
```

### 使用 NestData 记录器

现在我们有了一个数据装入器,我们的模块意识到了这一点,我们需要把它作为参数传递到我们的图QL解析器中的一个终点.

```typescript
import * as DataLoader from 'dataloader';
import { Loader } from 'nestjs-dataloader';
...

@Resolver(Account)
export class AccountResolver {

    @Query(() => [Account])
    public getAccounts(
        @Args({ name: 'ids', type: () => [String] }) ids: string[],
        @Loader(AccountLoader) accountLoader: DataLoader<Account['id'], Account>): Promise<Account[]> {
        return accountLoader.loadMany(ids);
    }
}
```

需要指出的是, 参数 `@Loader` 装饰者是 `NestDataLoader` 我们想被注射到方法。 DataLoader 图书馆将处理批量检索和缓存我们的请求。 注意:缓存按需存储.

## 捐款

总是欢迎拉动请求。 对于重大变动,请先开出一个问题来讨论你想要改变什么.

## 常见问题

### @applifting-io/nestjs-dataloader 是什么？

数据装入器的 NestJS 装饰器

### 如何安装 @applifting-io/nestjs-dataloader？

在项目目录运行 npm install @applifting-io/nestjs-dataloader，或使用 pnpm add / yarn add / bun add。

### @applifting-io/nestjs-dataloader 支持 TypeScript 吗？

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

### @applifting-io/nestjs-dataloader 支持 ESM 还是 CommonJS？

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

### @applifting-io/nestjs-dataloader 可以商用吗？

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

### @applifting-io/nestjs-dataloader 的下载量有多少？

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

### @applifting-io/nestjs-dataloader 还在维护吗？

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

