Nest.js学习记录2

2024-04-21 16:12
文章标签 学习 记录 js nest

本文主要是介绍Nest.js学习记录2,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1.项目结构

        src

                auth

                        dto        (包含数据传输对象,Data Transfer Object,相关的文件)

                                register.dto.ts        注册DTO,用于传输注册用户的信息

                        auth.controller.ts        负责处理身份验证相关的路由和控制逻辑

                        auth.module.ts        身份验证模块,定义身份验证相关的模块和服务提供者

                        auth.service.ts        身份验证服务,处理用户身份验证的逻辑

                common

                        rules        包含通用的验证规则相关的文件

                                is-not-exists.rule.ts        定义了一个验证规则,检查某些条件是否不存在

                        validate.ts        通用的验证逻辑,用于执行验证逻辑

                app.module.ts        项目的主模块文件,定义了整个项目的根模块

                main.ts        项目的入口文件启动整个应用程序

2.dto例

        register.dto.ts

import { IsNotEmpty } from "class-validator";
import { IsNotExistsRule } from "../../common/rules/is-not-exists.rule";export default class RegisterDto {@IsNotEmpty({ message: '用户名不能为空' })@IsNotExistsRule("user" , {message: "用户已存在"})name: string;@IsNotEmpty({ message: '密码不能为空' })password: string;
}

3.auth例

        auth.controller.ts

import { AuthService } from "./auth.service";
import { Controller , Body , Post } from "@nestjs/common";
import RegisterDto from "./dto/register.dto";@Controller()
export class AuthController {constructor(private auth:AuthService) {}@Post("register")register(@Body() body:RegisterDto) {return body;}@Post("login")login(){return "abc"}
}

        auth.module.ts

import { Module } from "@nestjs/common";
import { AuthService } from "./auth.service";
import { AuthController } from './auth.controller';
@Module({controllers: [AuthController],providers: [AuthService],
})
export class AuthMoudule {}

        auth.service.ts

import { Injectable } from "@nestjs/common";@Injectable()
export class AuthService {}

4.common例

        rules

                is-not-exists.rule.ts

import { PrismaClient } from "@prisma/client";
import {registerDecorator,ValidationArguments,ValidationOptions,
} from "class-validator";//自定义验证规则,用于检查数据库表中指定字段的值是否唯一
export function IsNotExistsRule(table: string, // 数据库表名validationOptions?: ValidationOptions // 验证选项
){return function (object: Record<string, any>, propertyName: string){registerDecorator({name: "isNotExistsRule", // 规则名称target: object.constructor, // 被装饰的类propertyName: propertyName, // 被装饰的属性名constraints: [table], // 约束参数,指定数据库表名options: validationOptions, // 验证选项validator: {// 异步验证函数,检查数据库表中是否已存在相同值async validate(value: string, args: ValidationArguments){const prisma = new PrismaClient();const res = await prisma[table].findFirst({where: {[args.property]: value // 使用 propertyName 属性名和传入的值查找记录}})// 返回判断结果,如果 res 存在则返回 false,表示不符合规则return !Boolean(res)}}})}
}

        validate.ts

import { HttpException, HttpStatus, ValidationPipe } from "@nestjs/common"
import { ValidationError } from "class-validator"export default class Validate extends ValidationPipe {protected flattenValidationErrors(validationErrors: ValidationError[]): string[] {const messages = {};validationErrors.forEach(error => {messages[error.property] = Object.values(error.constraints)[0];});throw new HttpException({code:422,messages,},HttpStatus.UNPROCESSABLE_ENTITY)}
}

这篇关于Nest.js学习记录2的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/923505

相关文章

前端原生js实现拖拽排课效果实例

《前端原生js实现拖拽排课效果实例》:本文主要介绍如何实现一个简单的课程表拖拽功能,通过HTML、CSS和JavaScript的配合,我们实现了课程项的拖拽、放置和显示功能,文中通过实例代码介绍的... 目录1. 效果展示2. 效果分析2.1 关键点2.2 实现方法3. 代码实现3.1 html部分3.2

Java深度学习库DJL实现Python的NumPy方式

《Java深度学习库DJL实现Python的NumPy方式》本文介绍了DJL库的背景和基本功能,包括NDArray的创建、数学运算、数据获取和设置等,同时,还展示了如何使用NDArray进行数据预处理... 目录1 NDArray 的背景介绍1.1 架构2 JavaDJL使用2.1 安装DJL2.2 基本操

关于Spring @Bean 相同加载顺序不同结果不同的问题记录

《关于Spring@Bean相同加载顺序不同结果不同的问题记录》本文主要探讨了在Spring5.1.3.RELEASE版本下,当有两个全注解类定义相同类型的Bean时,由于加载顺序不同,最终生成的... 目录问题说明测试输出1测试输出2@Bean注解的BeanDefiChina编程nition加入时机总结问题说明

JS 实现复制到剪贴板的几种方式小结

《JS实现复制到剪贴板的几种方式小结》本文主要介绍了JS实现复制到剪贴板的几种方式小结,包括ClipboardAPI和document.execCommand这两种方法,具有一定的参考价值,感兴趣的... 目录一、Clipboard API相关属性方法二、document.execCommand优点:缺点:

将sqlserver数据迁移到mysql的详细步骤记录

《将sqlserver数据迁移到mysql的详细步骤记录》:本文主要介绍将SQLServer数据迁移到MySQL的步骤,包括导出数据、转换数据格式和导入数据,通过示例和工具说明,帮助大家顺利完成... 目录前言一、导出SQL Server 数据二、转换数据格式为mysql兼容格式三、导入数据到MySQL数据

关于rpc长连接与短连接的思考记录

《关于rpc长连接与短连接的思考记录》文章总结了RPC项目中长连接和短连接的处理方式,包括RPC和HTTP的长连接与短连接的区别、TCP的保活机制、客户端与服务器的连接模式及其利弊分析,文章强调了在实... 目录rpc项目中的长连接与短连接的思考什么是rpc项目中的长连接和短连接与tcp和http的长连接短

Oracle查询优化之高效实现仅查询前10条记录的方法与实践

《Oracle查询优化之高效实现仅查询前10条记录的方法与实践》:本文主要介绍Oracle查询优化之高效实现仅查询前10条记录的相关资料,包括使用ROWNUM、ROW_NUMBER()函数、FET... 目录1. 使用 ROWNUM 查询2. 使用 ROW_NUMBER() 函数3. 使用 FETCH FI

Python MySQL如何通过Binlog获取变更记录恢复数据

《PythonMySQL如何通过Binlog获取变更记录恢复数据》本文介绍了如何使用Python和pymysqlreplication库通过MySQL的二进制日志(Binlog)获取数据库的变更记录... 目录python mysql通过Binlog获取变更记录恢复数据1.安装pymysqlreplicat

Node.js 中 http 模块的深度剖析与实战应用小结

《Node.js中http模块的深度剖析与实战应用小结》本文详细介绍了Node.js中的http模块,从创建HTTP服务器、处理请求与响应,到获取请求参数,每个环节都通过代码示例进行解析,旨在帮... 目录Node.js 中 http 模块的深度剖析与实战应用一、引言二、创建 HTTP 服务器:基石搭建(一

Servlet中配置和使用过滤器的步骤记录

《Servlet中配置和使用过滤器的步骤记录》:本文主要介绍在Servlet中配置和使用过滤器的方法,包括创建过滤器类、配置过滤器以及在Web应用中使用过滤器等步骤,文中通过代码介绍的非常详细,需... 目录创建过滤器类配置过滤器使用过滤器总结在Servlet中配置和使用过滤器主要包括创建过滤器类、配置过滤