Nest-初识 Nest
Nest是什么?Nest是一个用于构建高效且可伸缩的服务端应用程序的框架。明明都已经有了node为什么还要搞其他的呢? 起初Node是作为服务端应用的,最熟悉的一个项目就是Node社区,它的源码就是用的Node + mongodb,可以说Node就是Node社区的灵魂。 Node社区也是在node上昙花一现,也是把Node发挥到了最大的极致; 但是说了这么多,为什么要和Nest联系到一起呢? 首先,Nest是在Node, Express基础上扩展的,功能要比原有的丰富的很多; Nest作为前端中的后端,但是语法上面肯定要类似于纯后端,值得一提的是Nest是ts开发的,那么在定义接口参数的时候,Nest提供了DTO的概念,DTO是Data Transfer...
Nest-加载环境文件
介绍前俩篇讲解了快速入门nest,接下来大致介绍一下nest项目如何进行改造; 项目中一般都会用到中间件,拦截器,参数管道校验等等,接下来分多个方向大致介绍这些如何在项目中使用; 项目改造类似于vue项目,有一些成熟的方案去管理你的项目,提交规范,代码风格,代码规范,环境变量等等;改造的范围大致分为以下几点: 不同的环境变量,设置对应不同的值 设置跨域已经增强http工具,设置全局的访问前缀; swagger文档生产文档,不再需要自己编写具体的文档说明; 中间件,拦截器,定时任务等等; 加载不同的环境文件这里有俩种的方案可以实现,dotenv和@nestjs/config 首先需要设置环境,根据变量区分是开发环境还是生产环境; pnpm add -D cross-env安装cross-env,然后再package.json中找到scripts, 修改start启动命令: 1234567{ "scripts": { "start": "cross-env NODE_ENV=development nest...
Nest-其他配置
当然还有很多nest的配置,队列,任务调度,缓存,验证等,这里只介绍最常用的。 验证文档 举个例子来说,后端添加用户功能,肯定有很多字段是必填的,那不能每个字段都去校验吧,那么这一功能的判断就很多很多了,并且后面维护起来相当麻烦, 为了解决这一麻烦那么刚好可以使用内置的校验 1pnpm add class-validator class-transformer 注册在 app.module.ts中: 1234567891011import { Module, ValidationPipe } from '@nestjs/common';@Module({ providers: [ provide: APP_PIPE, useValue: new ValidationPipe({ transform: true, // 自动将请求体转换为 DTO 类型 whitelist: true, // 忽略未定义的属性 forbidNonWhitelisted:...
Nest-拦截器
介绍拦截器是用 @Injectable() 装饰器注释并实现 NestInterceptor 接口的类。 拦截器具有一组有用的功能,这些功能的灵感来自 面向方面编程 (AOP) 技术。它们可以: 在方法执行之前/之后绑定额外的逻辑 转换函数返回的结果 转换函数抛出的异常 扩展基本功能行为 根据特定条件完全覆盖函数(例如,出于缓存目的) 在日常接口调试中,总会看到后端返回的数据格式都是一致的,例如: 123456{ "success": true, "message": "操作成功", "context": {}, "code": 200} 接下来我会提到俩个案例,一个是接口返回拦截,一个是接口日志记录 接口调用记录自定义元数据123456789101112131415import { SetMetadata } from "@nestjs/common";import {...
Nest-请求拦截器
介绍在日常开发中,我们经常会碰见后端接口返回的信息数据,会发现不管请求成功还是失败返回的数据格式都是一样的,这个是如何做到的呢? 编写使用nest命令nest g itc interceptor,这个时候会生成一个文件,我们只需要在这个文件编写即可; 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182import { CallHandler, ExecutionContext, HttpException, HttpStatus, Injectable, Logger, NestInterceptor,} from "@nestjs/common";import * as kleur from "kleur";import { catchError,...
Nest-数据库的配置
数据库的配置 在node服务中,不论使用的express还是nest,都是有一些配置,环境的配置,数据库的配置等等; 那么俩者还是有些差别的; 这里我列举mongodb和redis在nest中的使用; Mongodb依赖安装首先安装依赖: 1pnpm add @nestjs/mongoose mongoose 安装成功之后, 那么只需要在app.module.ts中配置: 12345678import { Module } from "@nestjs/common";import { MongooseModule } from "@nestjs/mongoose";@Module({ // 不过建议可以将链接放到环境变量里,更安全 imports: [MongooseModule.forRoot("mongodb://localhost/nest")],})export class AppModule...
Nest-路由守卫
介绍守卫是一个用 @Injectable() 装饰器注释的类,它实现了 CanActivate 接口。 守卫有单一的责任。它们根据运行时存在的某些条件(如权限、角色、ACL 等)确定给定请求是否将由路由处理程序处理。这通常称为授权。授权(及其通常与之合作的身份验证)通常由传统 Express 应用中的 中间件 处理。中间件是身份验证的不错选择,因为诸如令牌验证和将属性附加到 request 对象之类的事情与特定路由上下文(及其元数据)没有紧密联系。 但是中间件,就其本质而言,是愚蠢的。它不知道调用 next() 函数后将执行哪个处理程序。另一方面,Guards 可以访问 ExecutionContext 实例,因此确切地知道接下来要执行什么。它们的设计与异常过滤器、管道和拦截器非常相似,可让你在请求/响应周期的正确位置插入处理逻辑,并以声明方式进行。这有助于使你的代码保持干爽和声明式。 为了让程序更加智能,这里使用装饰器功能,例如在某一个请求接口上添加一个装饰器,限制重复请求等等,...
Nest-异常过滤器
介绍 Nest 带有一个内置的异常层,负责处理应用中所有未处理的异常。当你的应用代码未处理异常时,该层会捕获该异常,然后自动发送适当的用户友好响应。 开箱即用,此操作由内置的全局异常过滤器执行,该过滤器处理 HttpException 类型(及其子类)的异常。当异常无法识别时(既不是 HttpException 也不是继承自 HttpException 的类),内置异常过滤器会生成以下默认 JSON 响应: 1234{ "statusCode": 500, "message": "Internal server error"} 内置异常例如,在 CatsController 中,我们有一个 findAll() 方法(一个 GET 路由处理程序)。假设此路由处理程序出于某种原因抛出异常。为了证明这一点,我们将硬编码如下: 1234@Get()async findAll() { throw new HttpException('Forbidden',...
我的项目-temp-pro
temp-pro这是一款简单的前端脚手架工具,其中包含内部脚手架; 可以通过 npm 命令下载不同项目(project-template)的模板的脚手架,下载项目模板分为 pc, h5, node 等等;极大节省配置项目的时间; 背景在开发类似相同性质的项目,大部分情况的操作就是将原有的项目再次复制一份出来然后进行修改整理,在添加远程的仓库,这样就一个新的项目就出来了; 虽然大部分人觉得复制粘贴是比较快的,但是我觉得这些重复性的操作没必要,所以就写了这个工具; 如何使用 安装 安装成功之后,您可以在控制台打印temp-pro -v,查看版本信息, 或者输入temp-pro -help 1npm i temp-pro 创建对应的项目 1temp-pro create <项目名称> 关于具体的展示情况,可以查看下图:
我的项目-桌面端项目常见问题
常见问题node 页面什么也没有如图 那么检测到您还未配置对应的环境变量,需手动配置; 环境配置 切换镜像源未更新windows首先确认以下 C:\Users\Administrator 下有没有 .npmrc 文件,如果有,请删除 C:\Users\Administrator 下的 .npmrc 文件,然后重启 node 页面,即可更新镜像源。 mac/linux查看根目录, .npmrc 文件,如果有,请删除 .npmrc 文件,然后重启 node 页面,即可更新镜像源。` 切换之后需要重启软件; 软件打开页面闪退软件版本有问题,可卸载之后在重新安装;如果还是一样,那么请提交 issues