@2amtech/crudx

中文文档
1.0.4发布于 2025/01/08TypeScriptCommonJS构建来源已验证近 30 天下载 5183

RESTful API 的 NestJs CRUD - 请求查询构建器

中文使用文档
文档目录4 节
  1. 安装
  2. 基本情况
  3. 智能
  4. 进一步阅读

@ 2amtech/ Crudx (英语)

@2amtech/Crudx是一个由令人印象深刻的作品所启发的重塑 巢状/花序,将其三套方案整合为一个连贯的解决方案. 它简化了创建CRUD(创建,读取,更新,删除)的端点,在Nest.js内部以显著的轻松度为RESTful应用.

该工具提供专门为端点生成、全球配置、请求验证以及专门服务而设计的装饰器,这些装饰器都是为了提高Crudx在不同情况下的效率和可用性而专门设计的.

一份全面的文件对Crudx的功能进行了有条理的探索,仔细地分为不同的部分。 每节都附有说明性样本和有见地的评论,促进更深入地了解如何有效地利用克鲁克思在你的项目中发挥作用.

安装

$ npm i @2amtech/crudx

基本情况

在潜入Crudx特性之前,为CRUD操作定义一个基本的Nest.js模块至关重要. 让我们使用用户模块作为样本:

首先,让我们定义一个实体.

Crudx支持TypeORM用于建设实体,所以让我们执行:

import { 
  AfterLoad,
  BaseEntity,
  Entity, 
  PrimaryGeneratedColumn, 
  Column,
  BeforeInsert,
  BeforeUpdate,
} from "typeorm";
import * as bcrypt from "bcryptjs";

@Entity()
export class User extends BaseEntity {
  @PrimaryGeneratedColumn("uuid") 
  id: string;

  @Column({ unique: true, length: 125 })
  email: string;

  @Column({ type: "varchar", length: 80 })
  password: string; 

  private tempPassword?: string;

  @AfterLoad()
  private loadTempPassword(): void {
    this.tempPassword = this.password;
  }

  @BeforeInsert()
  private async hashPassword(): Promise<void> {
    this.password = await bcrypt.hash(this.password, 10);
  }

  @BeforeUpdate()
  private async encryptPassword(): Promise<void> {
    if (this.tempPassword !== null && this.tempPassword !== this.password) {
      try {
        await this.hashPassword();

        this.tempPassword = this.password;
      } catch (error) {
        if (error instanceof Error) {
          throw new Error("Unable to encrypt password: " + error.message);
        }
      }
    }
  }
}

接下来,让我们创建一个服务:

import {Injectable} from "@nestjs/common";
import { InjectRepository } from "@nestjs/typeorm";
import { TypeOrmCrudService } from "@2amtech/crudx";
import { Catch, Injectable } from "@nestjs/common";
import { EntityNotFoundError, QueryFailedError } from "typeorm";

@Injectable()
@Catch(QueryFailedError, EntityNotFoundError)
export class UserService extends TypeOrmCrudService<User> {
  constructor(@InjectRepository(User) readonly repo) {
    super(repo);
  }
}

随着服务到位,让我们定义我们的控制器:

请注意,我们正在使用 @Crud 装饰师. 当它被定义为控制器时, 它会自动创建基本的 CRUD 路由 :

  • 起来 /user
  • 起来 /user/:id
  • 员额 /user
  • 员额 /user/bulk
  • 补丁 /user/:id
  • 设置 /user/:id
  • 删除 /user/:id

详情请参考 主计长 节.

在我们的样本中,我们正在为我们的 @CRUD 装饰器指定一些选项: model 财务报告和审定财务报表 params。 。 。 .

这个 model 选项是 @Crud() 装饰师. 它的类型属性将一个类定义为请求正体类型,使数据得到验证. 尽管我们的基本知识没有涵盖,但您可以在数据库中找到所有相关信息 请求验证 节。 提供的情况 type 应该是一个 Entity, (中文(简体) ), Model 或者说 DTO。 。 。 .

默认情况下,生成的路由将有一个参数命名 :id。此参数意在代表模型的主要键。 我们正在使用 params 选项来指示 Crudx 定义我们的参数 :id 作为 uuid 类型,表示该类型应与 id 字段.

import { Crud, CrudController } from "@2amtech/crudx";
import { Controller } from "@nestjs/common";
import { User } from "./user.entity";
import { UserService } from "./user.service";

@Crud({
  model: {
    type: User,
  },
  params: {
    id: {
        field: "id",
        type: "uuid",
        primary: true,
    }
  }
})
@Controller("users")
export class UserController implements CrudController<User> {
  constructor(public service: UserService) {}
}

与 entity, (中文(简体) ), service,以及 controller 定义中,剩下的只是导出一个模块并导入到应用程序的主模块中:

import { Module } from "@nestjs/common";
import { TypeOrmModule } from "@nestjs/typeorm";

import { UserController } from "./user.controller";
import { User } from "./user.entity";
import { UserService } from "./user.service";

@Module({
  imports: [TypeOrmModule.forFeature([User])],
  controllers: [UserController],
  providers: [UserService],
  exports: [UserService],
})
export class UserModule {}

智能

由于 CRUD 控制器是由 @Crud 装饰者 IntelliSense 将无法使用编译方法. 使您的代码能够从 this 关键词,您可以将这些行添加到您的课程中:

import { Crud, CrudController } from '@2amtech/crudx';
import { User } from './user.entity.ts';

@Crud(User)
@Controller('user')
export class UserController implements CrudController<User> {
  constructor(public service: UserService) {}

  get base(): CrudController<User> {
    return this;
  }
}

虽然上述例子提供了简单的示范,但它们有效地突出了利用克鲁克思的基本原则。 为了提供更深入的见解和全面的指导,我们鼓励你们探讨以下专门章节,其中论述具体的功能和先进的使用方案.

进一步阅读

谢谢你探索我们的资源 编码愉快!


网络开发从未如此有趣
www.2am.tech 页面存档备份,存于互联网档案馆

版本与发布记录

@2amtech/crudx 共发布 4 个版本,首次发布于 2024/08/05;过去 12 个月发布了 0 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
1.0.4latest2025/01/081.8 年前
1.0.32025/01/081.8 年前
1.0.12024/08/222 年前
1.0.02024/08/052 年前

关于 @2amtech/crudx 的常见问题

@2amtech/crudx 是什么?

RESTful API 的 NestJs CRUD - 请求查询构建器

如何安装 @2amtech/crudx?

在项目目录运行 npm install @2amtech/crudx,或使用 pnpm add / yarn add / bun add。

@2amtech/crudx 支持 TypeScript 吗?

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

@2amtech/crudx 支持 ESM 还是 CommonJS?

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

@2amtech/crudx 可以商用吗?

@2amtech/crudx 使用 未声明 许可。package.json 没有声明许可证。没有许可证的代码默认保留全部权利,商用前请联系作者或查看仓库中的 LICENSE 文件。以上为概括,不构成法律意见,请以许可原文为准。

@2amtech/crudx 的下载量有多少?

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

@2amtech/crudx 还在维护吗?

最新版本 1.0.4 发布于 2025/01/08(1.8 年前);至今共发布 4 个版本,其中过去 12 个月发布了 0 个;首次发布于 2024/08/05。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。