[NestJS 带你飞!] DAY01 - 简介

近年来,前後端都可以看到 JavaScript 的踪影,Node.js 的诞生让 JavaScript 变得非常热门,在 Node.js 生态圈中,主流的後端框架不外乎就是 ExpressKoa,这些框架非常 自由轻量,能够快速建立应用,因此非常受欢迎。

由於这些框架非常自由,所以 没有严谨的架构规范,非常容易写出 高耦合低内聚 的程序码,甚至 档案结构非常松散,使用这些主流框架的开发者如果没有订定一套规范,将会面临许多挑战。

後来出现了一套名为 NestJS 的框架,它受到前端框架 Angular 的启发,运用大量的 设计模式架构规范,再搭配强型别的 TypeScript,提供开发人员 严谨易扩展松耦合 的开发环境。

关於 NestJS

NestJS
图片来源

NestJS 采用模组化设计,将每种功能打包成独立模组,且设计许多抽象层来将各个不同职责的程序码片段抽成 各式元件,具有高度的解耦合与扩展性。NestJS 可以选择使用 Express 或 Fastify 作为底层基础,来打造 MVC 或 REST API 的应用,并将各种热门套件进行整合,如:TypeORM、mongoose、passport 等,甚至还可以实作时下非常流行的微服务 (Microservice),可说是一套整合度很高的框架。

NestJS 结合了三种程序设计的概念:

  • 物件导向程序设计 (Object Oriented Programming)
  • 函式程序设计 (Functional Programming)
  • 函式反应式程序设计 (Functional Reactive Programming)

从这些概念中提取精华,再搭配设计模式,使 NestJS 的整体架构十分清晰且严谨。

关於本系列文

以往 Node.js 作为後端应用最被诟病的不外乎就是 型别问题架构问题,NestJS 正是解决这两大问题的最佳选择,然而在台湾 NestJS 的热度相对来说并没有那麽高且繁体中文的教学也是相对稀少的,为了促进 NestJS 在台湾的发展,我决定写这个系列文来推坑各位这款强大的 Node.js 後端框架,事实上,我在去年的系列文就已经埋下了今年系列文的伏笔。本系列文会以 REST API 的方向来撰写,具体规划如下:

  1. NestJS 基本功能:约 10 ~ 15 篇,会针对 NestJS 各个基本元件做介绍,简单了解各元件的作用与使用方式。
  2. NestJS 进阶功能:约 3 ~ 5 篇,这阶段会讲解一些难度较高的原理与功能,让基本功更上一层楼。
  3. NestJS 多元化功能:约 5 ~ 8 篇,拥有稳固的基本功後,就可以来探索一些在开发上常用的功能。
  4. NestJS 开发实战:约 3 ~ 5 篇,学习完以上的内容,就可以透过实战开发来体会 NestJS 的奥妙。

另外,在文章中可能会有一些规则需要先了解:

  1. 终端机 (terminal):在本系列文中会使用到终端机,它在 Windows 里面称「命令提示字元」,在 Mac 里面称「终端机」,後面统一叫「终端机」。
  2. 指令 (command line):本系列文会在终端机下指令,有时候指令会有命名的部分,这边会用 <大写英文> 当作占位,读者们自行输入欲命名之名称。另外,所有的指令开头都会有一个 $ 表示这是指令,无须输入该符号
  3. Nest:即 NestJS 简称,後面提到 Nest 都是指 NestJS。
  4. 底层系统:前面有提到 NestJS 可以选择使用 Express 或 Fastify 作为底层,本系列文会以 Express 为主。
  5. 独立篇幅:我会尽可能让每一篇都是可以独立阅读的,让各位在回头看此系列文时,可以针对想要了解的部分去阅读,不被前後文影响,但如果是同一主题拆成好几篇的话,就可能会有前後文关系,再麻烦各位见谅一下。

具备条件

建议读者们至少要具备以下条件,会比较容易理解接下来的内容:

  1. 後端基本知识:至少要知道 HTTP、HTTP Methods。
  2. 物件导向:有接触过物件导向程序设计。
  3. TypeScript 或 JavaScript:Nest 支援这两种语言,官方建议使用 TypeScript。
  4. 有用过 Node.js。
  5. 有使用过终端机。

开始之前...

提醒:Node.js 也可以使用 nvm 进行安装。

  1. Node.js 官网下载并安装 Node.js,这边建议安装 LTS 版本,会比较稳定。
  2. 使用 VSCodeAtom 等自己喜欢的编辑器。
  3. Postman 官网下载并安装 Postman。
  4. 有任何问题都可以与我分享喔!

<<:  30天学会HTML+CSS,制作精美网站

>>:  Day14-seaborn(2)直方图histplot、散布图jointplot

分散式链路追踪 - Jaeger

在 OpenTelemetry 中有提到 trace 的概念。而 Trace 由多个 Span 组成...

【Day6】Opcua的介绍与连线

这段时间由於公司稍微忙一点,所以我就先把脑内的存稿一一先放出来, 软件的实作过程等有空档我再慢慢边重...

30天程序语言研究

今天是30天程序语言研究的第十四天,由於深度学习老师多让我们上了python的进阶课程里面包括之前没...

【Day 26】NumPy (3):Slicing, Copy, View, shape, Concatenate

前言 今天要来继续介绍 NumPy 的应用,包括了 Slicing 索引,Copy, View 复制...

[Day 02] 用Laravel写单元测试

我们今天终於要进入主题了, 这一系列的文章主要是针对已经有Laravel底子的人, 如果还没有写过或...