@ 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 页面存档备份,存于互联网档案馆