NestJs-项目创建

2023-05-16

NestJs

Nest.js 用于构建高效且可伸缩的服务端应用程序的渐进式 Node.js 框架。

项目创建

构建工具

  1. 可以使用 npm、yarn、pnpm进行包管理,但议使用pnpm
  2. 建议安装nrm镜像源管理工具,可以方便切换国内镜像,提高下载速度
  3. 建议安装nvm用于切换node版本

全局安装

首先全局安装相关命令,可以使用npm 、yarm、pnpm管理包

pnpm add -g @nestjs/cli nodemon ts-node
nest new project-name

项目依赖

进入项目目录然后安装项目依赖,包含数据库管理、表单验证、加密工具、JWT、文件上传、工具包、日期处理等

pnpm add prisma-binding @prisma/client mockjs @nestjs/config class-validator class-transformer argon2 @nestjs/passport passport passport-local @nestjs/jwt passport-jwt lodash multer dayjs express redis @nestjs/throttler

pnpm add -D prisma typescript @types/node @types/mockjs @nestjs/mapped-types @types/passport-local @types/passport-jwt @types/express @types/lodash @types/multer @types/node

vsCode相关

安装以下插件为NestJs提供支持

 1. Prisma
 2. JavaScript and TypeScript Nightly
 3. DotENV

prettierrc

NestJs项目创建后会生成.prettierrc文件,这是代码格式化规范

{
  "arrowParens": "always",
  "bracketSameLine": true,
  "bracketSpacing": true,
  "embeddedLanguageFormatting": "auto",
  "htmlWhitespaceSensitivity": "css",
  "insertPragma": false,
  "jsxSingleQuote": false,
  "printWidth": 120,
  "proseWrap": "never",
  "quoteProps": "as-needed",
  "requirePragma": false,
  "semi": false,
  "singleQuote": true,
  "tabWidth": 2,
  "trailingComma": "all",
  "useTabs": false,
  "vueIndentScriptAndStyle": false,
  "singleAttributePerLine": false
}

依赖注入

依赖注入指创建对象的过程由框架自动完成,a对象在使用b对象,b对象使用c对象,a对象只需要对象,而不需要了解b对象怎么怎么样创建出c对象。

高耦合代码

以下代码是没有依赖注入的情况,a对象要考虑b对象的参数,如果c对象也有参数也要考虑,这显然是高耦合低效率的编码体验。

class c {
  run() {
    console.log('c object');
  }
}

class b {
  constructor(private c) {}
  run() {
    this.c.run();
  }
}

class a {
  constructor(private b) {}

  run() {
    this.b.run();
  }
}

const o = new a(new b(new c()));
o.run();

依赖注入

NestJs将类定义在模块的 providers 属性中即声明为提供者,其他类可以在constructor构造函数中依赖注入,实现编码的解耦。

下面代码的构造函数使用依赖注入了PrismaService与JwtService服务实例。

@Injectable()
export class AuthService {
  constructor(private readonly prismaService: PrismaService, private readonly jwtService: JwtService) {}

  async login(loginDto: LoginDto) {
    const user = await this.prismaService.user.findUnique({
      where: {
        name: loginDto.name,
      },
    })

    const passwordCheck = await argon2.verify(user.password, loginDto.password)
    if (!passwordCheck) throw new BadRequestException('密码输入错误')

    return this.token(user)
  }
  ...
}

生命周期

nextjs生命周期
一般来说,nest.js请求生命周期大致如下:

1.收到请求
2.全局绑定的中间件
3.模块绑定的中间件
4.全局守卫
5.控制层守卫
6.路由守卫
7.全局拦截器(控制器之前)
8.控制器层拦截器 (控制器之前)
9.路由拦截器 (控制器之前)
10.全局管道
11.控制器管道
12.路由管道
13.路由参数管道
14.控制器(方法处理器) (15.服务如果有)
15.路由拦截器(请求之后)
16.控制器拦截器 (请求之后)
17.全局拦截器 (请求之后)
18.异常过滤器 (路由,之后是控制器,之后是全局)
19.服务器响应

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

NestJs-项目创建 的相关文章

随机推荐

  • C++ explict

    文章目录 C 43 43 中的explicit是一个关键字 xff0c 用于修饰构造函数 xff0c 它可以防止编译器进行隐式类型转换 xff0c 只允许显式地调用构造函数 它不能用于隐式转换和复制初始化 例如 xff0c 在下面的代码中
  • C++ friend

    在C 43 43 中 xff0c friend是一个关键字 xff0c 用于声明一个非成员函数或类可以访问另一个类的私有成员 例如 xff0c 我们有一个名为ClassA的类 xff1a span class token keyword c
  • C++ enum 和enum class

    文章目录 C 43 43 enum 和 enum class共同点区别 C 43 43 enum 和 enum class 在C 43 43 中 xff0c enum 是一种定义枚举类型的方法 一个枚举是一个整数值的命名集合 可以通过以下方
  • VS2019设置cl.exe环境变量

    版本 xff1a VS2019 设置 cl 环境变量 xff08 加入系统环境变量 xff08 PATH xff09 xff09 步骤 xff1a 1 找到cl exe的所在路径 xff0c 一般都在 xff1a C Program Fil
  • 从汇编角度看c++20 协程

    从汇编角度看c 43 43 20 协程 背景 xff1a 在学习c 43 43 20 协程的时候 xff0c 总对协程里边的局部成员存储 xff0c 以及协程栈恢复有很多疑问 xff0c 本次从过年arm64角度来分析下 xff0c 具体情
  • Win10 使用 Xrdp 远程控制 ubuntu16 闪退

    问题描述 win10使用 Xrdp 远程控制 ubuntu16 4 出现闪退 都能到这一步 xff0c 但是刚登上Xrdp4桌面就闪退 xff0c 回到下图 xfce4桌面xubuntu desktop xff0c 重新建立桌面会话 spa
  • 【华为OD机试真题 Java】字符串重新排列

    前言 本专栏将持续更新华为OD机试题目 并进行详细的分析与解答 包含完整的代码实现 希望可以帮助到正在努力的你 关于OD机试流程 面经 面试指导等 如有任何疑问 欢迎联系我 wechat steven moda email nansun09
  • atcoder abc140E (计算贡献)

    题目链接 大意 xff1a 让你 i 61 1 n
  • AtCoder Beginner Contest 143 E.Travel by Car(最短路)

    题目链接 大意 xff1a 给你一个无向带权图 xff0c 给你一些询问点 xff0c s t s t s t xff0c 你从s出发有 l
  • Ubuntu20.04软件安装大全

    目录 Ubuntu20 04 软件安装大全前言1 Windows和Ubuntu双系统安装1 1 下载Ubuntu系统镜像1 2 磁盘分区1 3 GPT分区安装Ubuntu1 4 系统完成后的一些设置1 5 遇到的一些小bug 2 换源2 1
  • 基于Nginx构建七牛云CDN静态资源加速

    创建七牛云账号 七牛云 进入管理控制台创建对象存储 3 配置nginx 使用nginx rewrite 的重定向功能进行转发到七牛云 server listen 80 server name test com 你的域名 location g
  • ChinaSkills-网络系统管理(2021年全国职业院校技能大赛A-1 模块 A:Linux 环境 真题 )

    前言 随着近年国家对技术性的比赛越来越重视 xff0c 各类技能大赛举办的相较正规 xff0c 这类大赛一般是在专科中专等技术性高中等院校中选拔优秀人才 xff0c 并且技能大赛的一等奖选手将有资格保送本科 xff0c 希望一些有能力的专科
  • Cannot resolve symbol 解决方案汇总(6种解决方案)

    Cannot resolve symbol 39 xxx 39 是比较常见一种错误 xff0c 以下整理常见的六种解决方案 xff0c 第六种会说明一下造成的原因和如何避免 方案一 检查一下pom文件依赖是否正常 xff0c 如不正常刷新m
  • 踩坑指南!import cv2出错怎么办?

    好久没有更新 xff0c 最近代码相关问题看的比较少 xff0c 有时候忙着debug就忘记了记录 xff0c 反思一下 背景 xff1a 在提取视频帧序列的时候用到了opencv包 xff0c 结果运行出错 解决 xff1a 经过查找资料
  • 最小生成树——北极通讯网络

    问题 B 北极通讯网络 时间限制 1 Sec 内存限制 128 MB 提交 17 解决 7 提交 状态 讨论版 命题人 add xiezhenghao 题目描述 北极的某区域共有n座村庄 xff08 1 n 500 xff09 xff0c
  • c++ 判定子类是否重写父类虚方法

    背景 xff1a 在做业务的时候 xff0c 有时会蹦到一个业务逻辑 xff0c 如果子类重写父类方法 xff0c 就调用 xff0c 如果没重写就不调用它 xff0c 这个逻辑在大量子类集成同一个父类的 xff0c 会节约一点点性能 xf
  • Windows | RDPWrap 远程桌面登录增强工具 (解决win10/11家庭版无法使用远程桌面 + 支持多人同时登录)

    一 前言 Windows远程桌面 Windows远程桌面是一种技术 xff0c 允许用户从远程位置访问和控制在另一个地方的Windows计算机 它可以帮助管理员和其他用户实现远程管理 技术支持和协同工作等操作 使用Windows远程桌面 x
  • 字符串匹配(java)

    字符串匹配 字符串匹配可以用到蛮力法 对于字符串s和t xff0c 若t是s的子串 xff0c 返回t在s中的位置 xff08 t的首字符在s中的下标 xff09 xff0c 否则返回 1 采用的是穷举法 xff0c 从s的第一个字符开始查
  • 警告:Establishing SSL connection without server's identity verification is not recommended

    解决方法 那问题来了 xff0c SSL是什么 xff1f SSL xff08 Secure Socket Layer xff1a 安全套接字层 xff09 利用数据加密 身份验证和消息完整性验证机制 xff0c 为基于TCP等可靠连接的应
  • NestJs-项目创建

    NestJs Nest js 用于构建高效且可伸缩的服务端应用程序的渐进式 Node js 框架 项目创建 构建工具 可以使用 npm yarn pnpm进行包管理 xff0c 但议使用pnpm建议安装nrm镜像源管理工具 xff0c 可以