前情回顾
乡党们早上好,我今天带着120分的热情提前半小时抵达单位,各位,集合了!
上一篇Why NestJs 是整个Nestjs系列的"开山刀",从今天开始请各位乡党跟紧步伐,我会尽可能真实的还原Nestjs构建企业级边缘计算平台的过程。内容主要以Nestjs实战为主题,同时为了内容的完整性、真实性,你们还将额外学到以下知识:
各位千万别慌,这些知识我会用最浅显易懂的语言和图形化方式灌输给你们,根本不会涉及什么看似很高端的XXX底层原理之类的,请记住楼主的一句话,技术千千万万,如果你能在特定 的场景选择合适 的技术并正确的使用,就已经很牛了。
举个例子,我见过90%的开发人员选择了Kafka作为消息总线,可是他们的业务从来不存在队列的需求, 再比如我接触的99%的开发人员选择了Mysql作为存储,可是他们的数据几乎都非常零散的配置型数据...
好了,各位 let's get started!!!
下载Nestjs
嘿嘿,没想到吧,我直接就下载Nest准备开撸了....,先不要管那些Nestjs概念好吗?让我们放轻松,来一首杰伦的反方向的钟
脚手架
nest提供了 Command Line Interface"=cli(命令行界面或者脚手架),把这个cli的全称请记住,要处处体现我们的专业。cli的作用就是提供了一些开箱即用的命令,帮助开发者更快速的创建一些目录、文件之类的。
cmd
npm i -g @nestjs/cli
@意味着安装到你电脑的全局环境,这样无论你在任意操作系统目录下执行nest命令,操作系统都认识,99%不会出现 nest command not found....
Nest命令
Nest安装完成后,你电脑里就注入了Nest这个全局命令,楼主的电脑是windows系统,我们现在看看nest命令都有哪些指令,这里又有一个细节,几乎99%的命令都包含 帮助 功能。
-h 或者--help 或者 --h,逃不出这三个选项,现在我们打开系统命令行,输入下面的指令看看
cmd
nest -h
所以说做开发,英语真是必备项,屏幕前的各位英语肯定都很牛逼,我就不翻译了,注意看第二个红框里面的new指令:用来创建你的Nest应用。
cmd
nest new edgeManagement
非常贴心啊,竟然问我喜欢NPM还是YARN?选NPM吧,注意哈,选择是用键盘上下键,确定是Enter键...然后各位去上个厕所吧,楼主现在每天喝8杯水,有时候尿频...
注意看里面的Donate(抖内特)这个单词,屏幕前的你估计Donate了不少主播吧,没错,就是打赏的意思,记住了!
大功告成!我们的边缘计算平台目前已经走出了第一步,注意看上图的dependencies,楼主不用研究Nestjs的架构,单看这个依赖项以及命名就能分析出框架的内部结构,一般叫COMMON的就是提供一些通用能力,CORE就是核心能力,platform就是跨平台。这种架构是市面上90%开源框架的雏形...由北向南形成依赖关系
目录结构分析
几乎所有的后端框架启动的入口都与 main 这个单词有关,比如Java和C++的main方法,nest提供的是main文件
javascript
//main.ts
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap();
很经典的单词 bootstrap(步特斯拽噗) 计算机Bootstrap是指通过一系列步骤,逐渐启动一个系统或应用程序的过程,它比你们最喜欢的 init 或者 start 作用范围要更广.
再来看bootstrap函数体,非常经典的工厂模式创建某个东西,记住了各位,但凡出现xxxFactory就是工厂模式,楼主是一个非常在意细节的人,评判一个程序员的水平从他的代码命名就能看出端倪,下图是你们最喜欢的命名
启动
所有使用Nodejs语言开发的程序,启动命令都在根目录的package.json > scripts 中定义
nest内置了4个启动命令,后面章节大家会使用到这4个命令,我个人非常喜欢这种使用冒号来划分场景的命名方式,如果你想自定义scripts命令,请看本章最后的 码农集合 板块。
- start
- start:dev
- start:debug
- start:prod
现在,让我们打开命令行工具,输入最简单的命令,看看操作系统是否会创建一个3000端口的进程
bash
npm run start
启动成功,现在我们用浏览器访问一下3000端口,看看返回什么
非常国际化的 Hello World ,注意看 X-Powered-By=Express 这个http 响应头,说明Nest内部肯定用到了Express,不是吗?
目前有些HTTP 服务器会给客户端响应 X-Powered-By=Express 这个字段,意思是告诉客户端,我是哪种服务器。比如 X-Powered-By = nginx,X-Powered-By = tomcat....好吧,楼主的确很细....心
Hello World
为什么页面会显示 Hello World ? 请大家跟着我一起,接下来的操作你们以后开发后端服务会经常用到。打开vscode万能的搜索,输入 Hello World 查看有哪些文件与这个字符串有关系
原来是app.service.ts文件内返回的,接下来使用鼠标双击选择 AppService ,之后按下右键,选择 go to references(意思是查看引用)。目的是从底至上查看完整的调用链
终点来了,通过我们一步步的 go to references,最终可以画出下面这张图
很关键的一张图,后面我们自己写的所有代码都遵循上图的调用链,细心的同学肯定发现了围绕app这个单词 出现了3个文件。没错,这个就是Nest框架的根基。为什么叫app,而不是root? 我猜可能Nest的作者还是受到Express的影响...
- app.module.ts
- app.controller.ts
- app.service.ts
好了,至此我们第二章节完成了Nest工程的初始化工作,下一章你们将学到关于模块的概念以及我们边缘计算平台的第一个自定义模块-边缘工程 。各位,2-3天后我们再见面!!!
码农集合
欢迎大家来到码农集合,作为惯例,楼主会在每篇文章的末尾给各位补充一些软件行业的小知识,我会用图形化的方式将复杂的事情给你讲明白,好了,let's get started!
自定义scripts命令
各位,你们天天 npm start 、npm build 有没有想过这背后是怎么转的?今天我带你们一起看看这其中的奥秘哈。需求:实现一个 npm run 秦人阿超,执行成功后命令行打印 "阿超牛逼" 。
是不是太简单了,下一期我带大家玩一个有难度的,类似vue/cli 的脚手架。好了各位,下期见...