Nestjs 配置ts的路径别名
前言在前端项目开发的时候,使用路径别名@/已经是基操了,但是在后端开发的时候,如何使用路径别名确实也没怎么了解过,配置后才发现真的超级简单。教程由于Nestjs本身就是ts运行的,所以在项目初始化后就有tsconfig.json文件了,我们只需要配置一下paths就可以直接使用了。tsconfig.json{ "compilerOptions": { "paths": { "@/*": ["src/*"] } } }使用:import {...
前言在前端项目开发的时候,使用路径别名@/已经是基操了,但是在后端开发的时候,如何使用路径别名确实也没怎么了解过,配置后才发现真的超级简单。教程由于Nestjs本身就是ts运行的,所以在项目初始化后就有tsconfig.json文件了,我们只需要配置一下paths就可以直接使用了。tsconfig.json{ "compilerOptions": { "paths": { "@/*": ["src/*"] } } }使用:import {...
前言Nestjs的文件上传官方文档给的讲解非常少,在掘金搜对应文章也大多数不全,有的都是好几年前的处理了,这里贴一下我学习到的处理方式。首先我们需要三个依赖:multer,这个是一个express的中间件,它只会处理multipart/form-data 类型的表单数据,主要用于上传文件。@types/multer 这个是multer的一个类型声明依赖。@nestjs/platform-express,这个依赖提供了上传模块和拦截器用于处理上传,它本身也依赖于multer。大概流程:首先我们从 @nestjs/platform-express引入MulterModule模块进行注册,为此...
NestJS 提供了多种预设的错误类,这些错误类对应于常见的 HTTP 状态码,并在 @nestjs/common 包中。BadRequestException: 对应于状态码 400(Bad Request),表明客户端请求的语法错误或无法处理请求。UnauthorizedException: 对应于状态码 401(Unauthorized),表明请求需要用户的身份认证。NotFoundException: 对应于状态码 404(Not Found),表明服务器找不到请求的资源。ForbiddenException: 对应于状态码 403(Forbidden),表明服务器理解请求但拒绝...
前言Nestjs文档中有两种鉴权方式,一种是自定义一个守卫,在守卫中自己从上下文header中取出token信息,然后自己解析判定。import { CanActivate, ExecutionContext, Injectable, UnauthorizedException } from '@nestjs/common'; import { JwtService } from '@nestjs/jwt'; import { jwtConstants } from './constants'; import { Request...
前言jwt生成,nestjs官方有一个专门的库@nestjs/jwt,它是一个模块,我们只需要将他注册为全局模块,并且传入secret密匙就能直接去使用它的服务了。教程先安装依赖:pnpm i @nestjs/jwt在app.module.ts中引入该模块,通过useFactory工厂模式,获取到ConfigModule提供的ConfigService服务,从而拿到环境变量文件中配置的secret。.env.development在环境变量中配置TOKEN_SECRET# token-secret TOKEN_SECRET="xxxxx"注意不要泄露这个密匙。app....
简介所有的数据库中,对密码的保存永远不是明文的,这是一种常识,我们使用Nestjs和Prisma创建用户时也是一样的,对用户的密码也不是明文的。有些教程使用argon2库来加密密码,但是这个库在windows上永远是安装失败,为此直接放弃使用它,改用crypto-js,来实现相同功能。教程先安装依赖:pnpm i crypto-js @types/crypto-js然后我们封装一个简单的工具文件:md5.tsimport { MD5 } from "crypto-js"; /** * @description: hash加密 * @param {string} ...
前言一个很经典的业务需求,注册用户时需要判断用户的账号是否已经存在,登录的时候也需要判断用户是否存在,只不过一个需要存在时报错,另一个需要判断不存在时报错。教程官方文档:class-validator创建文件:IsFieldExist.tsimport { registerDecorator, ValidationOptions, ValidationArguments } from "class-validator"; import { PrismaClient } from "@prisma/client"; let prisma: Pris...
前言默认情况下class-validator这个库本身并没有提供二次密码校验的方式,所以我们需要自己去实现这个功能,那么自然是需要实现一个符合库规范的属性装饰器了。首先我们需要知道,在class-validator中,自己实现一个校验方式,是可以获取到校验对象的,既然可以获取到校验的对象,自然可以读取对象里的那些属性了,为此实现一个二次密码校验是非常简单的。教程假设我们的数据对象如下:{ name: "", password: "", confirmPassword: "" }我们需要判断confirmPasswor...
简介在学习使用Nsetjs中了解了DTO这个东西,但是作为一个前端开发人员,其实不太懂这个东西是干什么的,于是自己去了解了一些,并记录一下。什么是DTO?nestjs框架本身借鉴了很多后端框架的经验,其中DTO就是一种在java开发广泛使用的一种设计模式。DTO的全称是Data Transfer Object,是一个用于客户端与后端服务传输数据的一种对象形式,在nestjs中更细节一点,就是前端传输的数据会在Controller控制层使用前,被转换成DTO数据对象,其实就是class类通过一些方式将数据赋值到这个类的实例对象上。后续的操作读取其实都是使用的DTO对象,同时我们的数据校验也...
前言在nestjs中,我们在controller或者在service中去调用一些依赖,不是像写vue那种,直接es6导入导出,而是通过依赖注入的形式,在类构造函数constructor中声明需要的依赖,nestjs会在实例化的时候将对应的依赖实例作为参数传入。示例:app.controller.tsimport { Controller, Get } from "@nestjs/common"; import { AppService } from "./app.service"; @Controller() export class AppCo...
前言在一个稍微正式点的项目中,它的环境变量文件肯定多个的,一般会有开发用的环境变量文件,正式上线的环境变量文件,测试用的环境变量文件,甚至还有更多,但是在nestjs和prisma的官方文档中,都是只用一个环境变量文件.env,显然有点弱了,为此写一篇关于如何使用多环境变量文件的教程。依赖安装pnpm i cross-env dotenv dotenv-cli -D理论上讲dotenv可以不用明确安装,但是但是安装一些,以后也用得到,比较是一个基建类的库,用于解决环境变量相关方面。cross-env 用于指定NODE_ENV。dotenv-cli是给prisma用的。创建环境变量文件在项...
前言本来debian在安装的时候就可以选择国内的源,本来我以为这样就行了,不用自己在手动换,结果今天在使用更新命令时就给我卡住了,开始请求官方源了。难崩,还得自己换源解决问题。教程我们需要打开源文件:/etc/apt/sources.list ,你可以使用nano编辑或者ssh软件自带的文件管理功能修改文件。将里面deb和dep-src全部注释,注意这个注释是在每行前面加#号,大概如下:# deb http://mirrors.ustc.edu.cn/debian/ bookworm main non-free-firmware # deb-src http://mirrors.ustc...
前言由于最近研究了下br和gzip的配置,个人对于这个压缩处理推荐的逻辑是这样的:当访问的资源本地存在br文件的时候,优先使用br,br不存在的时候,访问gz文件,如果gz还不存在,就走默认资源处理或者返回源文件那么这套该怎么配置呢?教程全局nginx配置:gzip on; gzip_static on; gzip_min_length 1k; gzip_buffers 4 16k; gzip_http_version 1.1; gzip_comp_level 2; gzip_types text/plain application/javascript applica...
前言网上充斥着各种cv的教程,看的我真的要吐了,在国内环境下,根本没法正确编译brotli,为此我自己写一篇完全可用的教程。首先说一下流程:我们需要先卸载nginx,然后通过安装宝塔的服务器,用git拉取一个ngx_brotli项目,然后进入该项目,调用git submodule update --init,当内容返回checkout的时候才算扩展拉取成功。但是大部分人都会卡在这里,因为国情的原因,我们没法正确的拉取到项目。当我们拉取完毕后在宝塔点击安装nginx,选择编译安装,将刚刚拉取的模块加载进来一起编译安装。然后就等待安装完成即可。解决ngx_brotli拉取问题[hide]首先...
前言用了1天发现NFS的共享对windows来说真的是噩梦,权限问题太多了,最后在共享的磁盘中处理git仓库操作,各种问题,最后选择放弃,还是使用windows更加友好的SMB共享。对于linux之间的磁盘共享,通过NFS可以提供性能,对于windows的共享,还是得SMB。教程pve通过ssh连接,安装依赖:[hide]apt-get install samba samba-client理论上将pve自己是smb提供方,应该是不需要安装samba-client客户端的,但是由于又要在数据中心挂载目录,所以还是装一下吧。安装完成后我们配置一下smb配置。首先我们的共享目录就以上次挂载的磁...
上一章我们挂载了一个磁盘,但是这个磁盘如果要给其他虚拟机使用,粗暴的方式就是给其他虚拟机直接在硬件那添加一个磁盘,但是这种方式并不是共享,而是占用指定的空间,显然这并不方便。于是我选择了NFS的方式进行共享,这样linux系统可以使用,windows系统也可以使用。[hide]pve安装NFS通过ssh连接pve。apt-get update apt-get install nfs-kernel-server上一篇我们挂载的磁盘创建的目录是mnt/sda1,我们继续使用它。nano /etc/exports添加一行:/mnt/sda1 *(rw,sync,no_root_squash)...
擦除磁盘对于新的硬盘来说,其实没啥必要擦除,但是如果你是一个已经格式化过的硬盘,你希望重新开始,或者说你的磁盘格式不对,可以先用pve的可视化操作快速擦除一下。擦除完我们还需要进行格式化分区并挂载目录。分区格式化[hide]先输入:fdisk /dev/sda 打开指定的分区表并准备操作格式化处理,其中的sda就是上面我们通过pve查看到的新增的磁盘设备,如果你不知道,你可以通过下面这个命令去查看所有磁盘设备:fdisk -l可以看到用我这里已经有两块已经格式化的磁盘分区。其中sda就是本次教程完成后的效果。找到你需要格式化处理的分区输入fdisk 分区路径进入help界面。先输入n再输...
搞不懂为啥安装最新版的Debian12后就无法像之前那样通过sudo进行提权处理,解决方法如下:先通过普通用户登入,ssh连接或者Debian本地终端也行,输入以下命令:su -此时我们输入root账号的密码就不会提示不是 sudoers 文件了,但是这并不能解决问题,我们继续:visudo此时会打开一个文件,我们往下翻找到root ALL=(ALL:ALL) ALL 这行字符,在它的下一行我们输入一行文本:你当前用于提权的账号 ALL=(ALL:ALL) ALL如果你当前用于提权的账号是aaaa,那么实际文本内容就是:aaaa ALL=(ALL:ALL) ALL输入完毕后CTRL...
再使用vscode远程管理的时候,有一会突然cpu占用暴增,但是不清楚是哪个程序导致的,于是了解了下如何去查看占用。一般情况下大部分的教程都是推荐使用top命令,但是这个实在是太丑了,不太好分辨。于是我们可以使用增强版htopsudo apt install htop安装完成后我们运行命令:htop可以得到一个不错的界面展示。Mem 条目显示了总内存,已用内存,空闲内存和 buffer/cache 的内存。Swap 条目显示了交换空间的总量,已使用的交换空间和空闲的交换空间。%MEM 显示了该进程使用的物理内存占总内存的百分比。RES 或 RSS 显示了该进程现在正在占用的物理内存量(单...
前言以前我利用linux虚拟机的时候,文件的共享都是通过samba实现的,在windows中通过映射网络驱动器的方式,将linux中文件当做磁盘文件一样来进行管理。but,我这么做是为了通过vscode打开项目能方便一些,但是这次失算了,因为我的主题项目里面用到了@commitlint/cli来对git提交进行管理,但是这个依赖使用的是cmd.exe命令,这就导致我挂载的网络硬盘不兼容了,cmd不支持UNC路径,运行命令时直接就报错了。如果你也是像我这种,可以改用远程vscode的方式来管理项目代码,当然这种方式对虚拟机的配置要求较高,测试n5105在大部分项目中,都是可以应对的,如果是...
bios设置这个由于不同的bios设置不同,我这里就只是拿我自己的举例子,在bios中找到:NetWork Wake on LAN Enable,设置成Enabled。这里就各自去看自己的主板型号百度搜对应配置。pve设置wol[hide]先ssh连接到pve,我们需要安装一个插件来查看网口相关信息:apt-get install ethtool安装完成后查看下使用的网口是哪个:ip addr show可以看到我这有4个网口信息,enp2s0这种名字的,然后有对应的mac地址,我们可以去路由器查看当前联网的pve mac地址是什么来确定使用的是哪个网口,因为我这是DHCP模式,所以不好区...
NxShell连接debian的时候,由于debian默认要求你只能使用非root账号连接,导致我在sudo提权之后,sftp还是普通用户权限,有些文件修改和上传不方便了,于是想着让他允许使用root连接。我们先使用普通用户连接到debian主机。输入:sudo -i先提权,再输入:nano /etc/ssh/sshd_config找到#PermitRootLogin prohibit-password将它的注释解开,或者再后面再写一行,解开的话这个文本得改,我建议是再写一行,内容如下:PermitRootLogin yes然后CTRL + O保存,CTRL + X退出编辑。重启下ssh...
手动安装Alist手动安装相对来说好控制一些,先宝塔创建一个纯静态的html站点,比如:www.alist.com,创建完毕后我们先去下载Alist代码。github:Alist找到右侧Releases,点击进入详情页,找到最新版,然后下载alist-linux-amd64.tar.gz这个版本的文件,因为amd64表示linux x86/x64。下载完毕后我们将这个文件上传到刚创建的www.alist.com目录下,解压文件到当前目录,得到一个alist文件,没错,只有一个文件。ssh连接到debian,sudo -i 提权,然后访问到www.alist.com目录:cd /www/w...
最近评论