@applifting-io/nestjs-dataloader

中文文档
1.1.6发布于 2025/09/22MITTypeScriptCommonJS近 30 天下载 1779

数据装入器的 NestJS 装饰器

中文使用文档
文档目录6 节
  1. 安装
  2. 使用量
  3. NestData Loader 创建
  4. 提供 NestData 记录器
  5. 使用 NestData 记录器
  6. 捐款

NestJS 数据载入器

Node.js CI Coverage Status

NestJS 数据装载器简化添加 图表ql/数据加载器 到你的巢穴JS项目。 DataLoader旨在解决常见的N+1加载问题.

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

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

安装

npm i @applifting-io/nestjs-dataloader

使用量

NestData Loader 创建

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

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, 我们需要提供它的模块.

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解析器中的一个终点.

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 共发布 7 个版本,首次发布于 2023/11/07;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.1.6latest2025/09/221.1 年前
1.1.52023/11/073 年前
1.1.32023/11/073 年前
1.1.22023/11/073 年前
1.1.12023/11/073 年前
1.1.02023/11/073 年前

关于 @applifting-io/nestjs-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 和提交记录判断。