当前位置: 首页 > article >正文

Nest全栈到失业(一):Nest基础知识扫盲

Nest 是什么?

        问你一个问题,node是不是把js拉出来浏览器环境运行了?当然,他使用了v8引擎加上自己的底层模块从而实现了,在外部编辑处理文件等;然后它使用很多方式来发送请求是吧,你知道的什么http.requesthttps.request; 我们浏览器中,使用AJAX以及封装AJAX和http的Axios;再后来又有了处理http请求的东西,包括express,koa这种框架,是吧,也就是说,你不仅可以使用node发送请求,也可以处理请求,实现编写后端,文件处理,是不是?

        但是本人用过express,怎么说呢,感觉写了一大堆东西,乱七八糟,还就是一个基本的请求处理

        koa我就不说了,洋葱模型挺不错的,但是感觉好像又是小作坊的东西,,,,没有一点企业级的开发规范和社区支持,所以node推出了,新一代的处理请求的框架,nest.js

        他有太多的好处了基于 TypeScript + OOP + FP + DI(面向对象+函数式+依赖注入)以及企业级支持能力,支持 MVC、REST、GraphQL、WebSocket、微服务架构,支持 Swagger 文档生成、配置文件、日志系统等等太多了,但其实他的http处理默认也是依据express的,但是你可以换fastify

nest-cli

        

        这里nest的官方脚手架,就是企业级的开发模板,我们使用npm安装一下,然后使用nest new XXX创建一个项目吧,我选的是npm包管理器

        他还有很多命令,你可以使用nest  --help 查看哦,显示这个就说明你创建ok了,你可以使用编辑器打开该目录了

        这里就是创建好了,我们进入看看

这都是什么?

idea是我的编辑器配置

node_module 是需要用到的包

src 是项目的根目录

test  是测试文件

README 是项目描述

nest-cli.json 是脚手架的配置文件

其他的就是关于git,pretter,ts以及eslint的规范的文件了,其他的我们不用看了,我们之所以所有的代码都是红的,就是因为我们没有创建git 环境,我们添加后就绿了

那我们写代码的时候在哪里呢?现在在src目录下,我们随便打开一个文件,发现全是报错,怎么办?

这是我们的规范插件prettierrc 的问题,怎么办?直接忽略掉,创建一个.prettierignore文件,直接写一个*忽略所有即可,这就不报错了

Main

在这里就是对于整个nest实例的一些配置了,包括我们后续使用的一些全局性的,项目都使用的东西,就可以写在这里,和vue一样使用app.useXXXXX来使用

import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';// 新建的实例方法
async function bootstrap() {// 创建实例const app = await NestFactory.create(AppModule);// 监听的端口await app.listen(process.env.PORT ?? 3000);
}
bootstrap();

Module

        src下的module是什么?现在是app.module.ts,什么是nest的module?简单说,他是它是一个封装和组织应用功能的容器,每个模块包含了控制器、服务、提供者,管道等内容,负责管理应用中的一部分功能;就是用来管理和调配这个模块的所有东西的

一般包括

Imports:导入其他模块,形成模块之间的依赖关系;

Controllers:处理请求和返回响应,负责调用服务;

Providers(通常是 Service):处理业务逻辑,返回结果;

Exports:将模块的某些功能(如服务)导出,以便其他模块使用

        他就是好比一个公司的董事会,供应商用这个,我们提供什么服务?别人来找我们合作了,我让那个部门出来处理他们的需求!!! 统筹管理可以理解了吧

Controller 

        这是什么?这就是你的所有的请求分发处理的地方,好比什么呢,刚刚的公司董事会说:我们现在有一个合作商,他的产品出问题了,对应的产品售后支持部门就出来应对了;我们有新的客户了,这时候市场部就出来应对了,理解了吧,就是合适的事,交给合适的部门;

        当然了,在这里他还有一个作用,那就是处理我们请求中的数据,客户来了,提出的问题,你不得格式化成自己公司的流程再分发给各部门吗?

         那有人就要问了,为什么不把逻辑写在这里?首先,你不会知道一个逻辑有多长的,你也不会知道他就会依赖那些东西,如果都写在controller中,不免感觉到麻烦,nest主打的就是什么人做什么事,控制器,他就是用来分发请求的,请保持他的干净

        这里有很多的装饰器,什么是装饰器,就是ts中说的,我们在不改变一个东西的逻辑的情况下,给他的属性或逻辑添加点东西,这就是修饰符,分为方法修饰符,类修饰符,属性修饰符,参数修饰器,访问器修饰器等

        在nest中,处理get请求,处理post,delete,put,patch等等请求,都有对应的装饰器就是@开头的,@Controller也是装饰器,你看到了没

        那你说,写一个post请求怎么写?就是这么简单,然后把真正处理的逻辑写在service里,当然了, 方法的名字嘛,随便起,不一定非要和控制器中的一样

Service

        Service 负责处理实际的业务逻辑,对应的就是各个处理事情的部门了,到这里我们梳理一下哈

        董事会(module)协调所有的事情,然后把各个事件下发(contorller)各部门,然后各部门详细的处理(Service)这些事件,到此OK了

import { Injectable } from '@nestjs/common';@Injectable()
export class AppService {getHello(): string {  //处理业务的方法return 'Hello World!';}
}

        书接上回的Post的处理方法

项目运行 

        我们使用npm run start:dev即可运行项目了,使用postman测试一下

        这样的是运行起来了,如果报错了,大多数是端口占用了,你去main里换个端口即可

        那我们的请求方式在哪里啊,就是在你的contorller中,你自己写的请求装饰器,你不是还写了一个post的请求吗,你把postman切换使用post请求方式试试

        那我们的请求地址是什么,一般来说,你还没有上线到服务器,所以就是本机的ip+项目的端口+请求地址,假如我们给contorller一个路径呢?你看好 ,那你的请求就要换地址了

        一般来说,响应的内容也是我们自己定义的,只不过我们现在没有那么多的逻辑呢,我们先在service里改一下,让你看看,是不是他使用contorller分发请求,使用service处理逻辑的

结语

module,service,contorller就是拉动nest运行的三架马车,这是最最基本的东西了,下次讲解

cli的完全使用,以及nest的底层逻辑

大家有没有想过为什么我的名字叫全栈到失业?

因为Nest地位有点尬,你想,我一个公司,要写前端和后端,java存在几十年了,那么的成熟的技术,完善的社区,以及处理高并发和微服务的生态链,他不是一天两天可以替代的,但是你说为什么java也在失业呢?这就是国内的现状了,就是市面上,除了一些自研公司,其他的都是外包,写来写来就是CRUD,m没有创新点,其次就是国人基数太大了,14亿人,一年1000w毕业的,不得有10wjava专业的?市场怎么吸纳那么多人啊?

那Nest为什么会存在?因为Nest(Node.js)解决的是“更快、更轻、更灵活”的问题,他的编码速度,启动速度都比java快,而且使用前端ts的语法,前端也可以写后端,而且现在nest的微服务,高并发生态也不错啊.所以他其实很适合中小企业的后端开发的,可是,国内太少一肩挑的了,只能期望自己越来越强吧,加油!

相关文章:

Nest全栈到失业(一):Nest基础知识扫盲

Nest 是什么? 问你一个问题,node是不是把js拉出来浏览器环境运行了?当然,他使用了v8引擎加上自己的底层模块从而实现了,在外部编辑处理文件等;然后它使用很多方式来发送请求是吧,你知道的什么http.request 或 https.request; 我们浏览器中,使用AJAX以及封装AJAX和http的Axios…...

摩尔线程S4000国产信创计算卡性能实战——Pytorch转译,多卡P2P通信与MUSA编程

简介 MTT S4000 是基于摩尔线程曲院 GPU 架构打造的全功能元计算卡,为千亿规模大语言模型的训练、微调和推理进行了定制优化,结合先进的图形渲染能力、视频编解码能力和超高清 8K HDR 显示能力,助力人工智能、图形渲染、多媒体、科学计算与物…...

Tesseract OCR 安装与中文+英文识别实现

一、下载 https://digi.bib.uni-mannheim.de/tesseract/ 下载,尽量选择时间靠前的(识别更好些)。符合你的运行机(我的是windows64) 持续点击下一步安装,安装你认可的路径即可,没必要配置环境变…...

Cypress + React + TypeScript

🧪 Cypress + React + TypeScript 组件测试全流程实战:从入门到自动化集成 在现代前端开发中,组件测试 是保障 UI 行为可靠性的重要手段。本文将通过一个 React 项目示例,实战演示如何结合 Cypress + React + TypeScript 实现从零配置到自动化集成的完整测试链路。 一、项…...

每个路由器接口,都必须分配所属网络内的 IP 地址,用于转发数据包

在IP网络中,主机(Host)和路由器接口(Router Interface)都需要分配网络地址(IP地址)。 1. 主机(Host)的IP地址分配 (1) 作用 主机的IP地址用于唯一标识该设备&#xff0…...

c++第四课(基础c)——布尔变量

1.前言 好,今天我们来学布尔变量(bool),开搞! 2.正文 2.1布尔数据的定义值 布尔数据的定义值,是只有真和假 顺便提一句0是假,非0的数字都是真 不过为了简便 我们一般都用0和1 2.2布尔数…...

第2期:APM32微控制器键盘PCB设计实战教程

第2期:APM32微控制器键盘PCB设计实战教程 一、APM32小系统介绍 使用apm32键盘小系统开源工程操作 APM32是一款与STM32兼容的微控制器,可以直接替代STM32进行使用。本教程基于之前开源的APM32小系统,链接将放在录播评论区中供大家参考。 1…...

Docker-搭建MySQL主从复制与双主双从

Docker -- 搭建MySQL主从复制与双主双从 一、MySQL主从复制1.1 准备工作从 Harbor 私有仓库拉取镜像直接拉取镜像运行容器 1.2 配置主、从服务器1.3 创建主、从服务器1.4 启动主库,创建同步用户1.5 配置启动从库1.6 主从复制测试 二、MySQL双主双从2.1 创建网络2.2 …...

LeetCode - 203. 移除链表元素

目录 题目 解题思路 读者可能出现的错误写法 正确的写法 题目 203. 移除链表元素 - 力扣(LeetCode) 解题思路 使用哨兵节点: 创建一个哨兵节点(dummy),将其next指向原链表头节点 哨兵节点的作用是统一处理所有情况&#x…...

canvas 实现全屏倾斜重复水印

​ 参考&#xff1a; html、js、canvas实现水印_html页面使用canvas绘制重复水印-CSDN博客 效果 ​​​​ 不求水印显示完全。 实现代码 <template><div class"watermark" ref"waterMark"></div></template><script lang&q…...

vue3项目 前端文件下载的两种工具函数

1、Blob 流下载 Blob 表示不可变的原始数据的类文件对象&#xff0c;通常用于处理文件或大块二进制数据。 注意&#xff1a;js中还有一个二进制数据类型ArrayBuffer&#xff0c;它们的区别如下 Blob 可以位于磁盘、高速缓存内存和其他不可用的位置&#xff1b;ArrayBuffer 是存…...

SpringAI系列 - 升级1.0.0

目录 一、调整pom二、MessageChatMemoryAdvisor调整三、ChatMemory get方法删除lastN参数四、QuestionAnswerAdvisor调整Spring AI发布1.0.0正式版了😅 ,搞起… 一、调整pom <properties><java.version>17</java.version><spring-ai.version>...

5.31 day33

知识点回顾&#xff1a; PyTorch和cuda的安装 查看显卡信息的命令行命令&#xff08;cmd中使用&#xff09; cuda的检查 简单神经网络的流程 数据预处理&#xff08;归一化、转换成张量&#xff09; 模型的定义 继承nn.Module类 定义每一个层 定义前向传播流程 定义损失函数和优…...

Vue3 + VTable 高性能表格组件完全指南,一个基于 Canvas 的高性能表格组件

Vue3 + VTable 高性能表格组件完全指南 前言 VTable 是一个高性能的多维表格组件,专为处理大数据量场景而设计。它支持数十万条数据的快速渲染,提供了丰富的表格功能和良好的用户体验。本文将详细介绍如何在 Vue3 项目中使用 VTable,并解决常见的配置问题。 什么是 VTabl…...

【七. Java字符串操作与StringBuilder高效拼接技巧】

7. java字符串 7.1 API 介绍&#xff1a;应用程序编程接口。在 Java 中&#xff0c;API 指的是 JDK 提供的各种功能类&#xff0c;这些类把底层实现封装好了&#xff0c;我们不用关心内部怎么写的&#xff0c;直接用就行 用 API 帮助文档步骤&#xff1a;以查Random类为例 打…...

题解:洛谷 P12672 「LAOI-8」近期我们注意到有网站混淆视听

设 LGR 存在数量为 x x x&#xff0c;CSP 存在数量为 y y y。 很明显&#xff0c;我们只需要将其中数量较小的一方改没就行了&#xff08;一个巴掌拍不响&#xff09;。 每两个字符串可同意进行一次更改&#xff0c;答案为&#xff1a; ⌈ min ⁡ ( x , y ) 2 ⌉ \left\lce…...

HTML 计算网页的PPI

HTML 计算网页的PPI vscode上安装live server插件&#xff0c;可以实时看网页预览 有个疑问&#xff1a; 鸿蒙density是按照类别写死的吗&#xff0c;手机520dpi 折叠屏426dpi 平板360dpi <html lang"en" data - overlayscrollbars - initialize><header&…...

WIN11+eclipse搭建java开发环境

环境搭建&#xff08;WIN11ECLIPSE&#xff09; 安装JAVA JDK https://www.oracle.com/cn/java/technologies/downloads/#jdk24安装eclipse https://www.eclipse.org/downloads/ 注意&#xff1a;eclipse下载时指定aliyun的软件源&#xff0c;后面安装会快一些。默认是jp汉化e…...

Linux 环境下C、C++、Go语言编译环境搭建秘籍

引言 在当今多元化的编程世界里&#xff0c;C、C 和 Go 语言凭借各自独特的优势&#xff0c;在不同的领域发光发热。C 语言作为一门古老而强大的编程语言&#xff0c;以其高效、贴近硬件的特性&#xff0c;在操作系统、嵌入式系统等底层开发中占据着重要地位&#xff1b;C 作为…...

MMR-Mamba:基于 Mamba 和空间频率信息融合的多模态 MRI 重建|文献速递-深度学习医疗AI最新文献

Title 题目 MMR-Mamba: Multi-modal MRI reconstruction with Mamba and spatial-frequency information fusion MMR-Mamba&#xff1a;基于 Mamba 和空间频率信息融合的多模态 MRI 重建 01 文献速递介绍 磁共振成像&#xff08;MRI&#xff09;因其无创、无辐射特性以及…...

2.5/Q2,Charls最新文章解读

文章题目&#xff1a;Trajectories of depressive symptoms and risk of chronic liver disease: evidence from CHARLS DOI&#xff1a;10.1186/s12876-025-03943-7 中文标题&#xff1a;抑郁症状的轨迹和慢性肝病风险&#xff1a;来自 CHARLS 的证据 发表杂志&#xff1a;BM…...

Unity QFramework 简介

目录 什么是MVC模式&#xff1f; QFramework 架构提供了 Model 的概念 QFramework 架构引入 Command 的方式 QFramework 架构引入 Event事件机制 四个层&#xff1a;表现层、系统层、数据层、工具层 委托和回调函数的关系 命令和事件的区别 工具篇 QFramework整体基于M…...

C++ 日志系统实战第五步:日志器的设计

全是通俗易懂的讲解&#xff0c;如果你本节之前的知识都掌握清楚&#xff0c;那就速速来看我的项目笔记吧~ 本文项目代码编写收尾&#xff01; 日志器类 (Logger) 设计&#xff08;建造者模式&#xff09; 日志器主要用于和前端交互。当我们需要使用日志系统打印 log 时&…...

@Docker Compose部署Alertmanager

文章目录 Docker Compose部署Alertmanager1. 准备工作1.1 系统要求1.2 目录结构准备 2. 配置文件准备2.1 创建docker-compose.yml文件2.2 创建Alertmanager配置文件 3. 部署Alertmanager3.1 启动服务3.2 验证服务状态3.3 检查日志 4. 服务验证4.1 访问Web UI 4.2 API健康检查5.…...

前端面试准备-3

1.let、const、var的区别 ①&#xff1a;let和const为块级作用域&#xff0c;var为全局作用域 ②&#xff1a;let和var可以重新赋值定义&#xff0c;而const不可以 ③&#xff1a;var会提升到作用域顶部&#xff0c;但不会初始化&#xff1b;let和const也会提升到作用不顶部…...

性能测试-jmeter实战1

课程&#xff1a;B站大学 记录软件测试-性能测试学习历程、掌握前端性能测试、后端性能测试、服务端性能测试的你才是一个专业的软件测试工程师 性能测试-jmeter实战1 为什么需要性能测试呢&#xff1f;性能测试的作用&#xff1f;性能测试体系性能测试基础性能测试工具性能监控…...

汽车高速通信的EMC挑战

随着“软件定义汽车”的理念全面渗透,中国汽车行业正加速向集中式电子电气架构(E/E架构)转型。SOA(面向服务的架构)理念推动下,整车开始围绕中央计算平台(OIB)与分布式域控制器(VIU)构建,硬件平台具备前所未有的数据处理能力,能掌控整车控制与实时感知决策。 一、…...

[SC]SystemC在CPU/GPU验证中的应用(五)

SystemC在CPU/GPU验证中的应用(五) 摘要:下面分享50个逐步升级SystemC编程能力的示例及建议的学习路线图。您可以一次一批地完成它们——从前五个基础的例子开始,然后转向channels, TLM, bus models, simple CPU/GPU kernels等等。在每个阶段掌握之后,再进行下一组…...

[蓝桥杯C++ 2024 国 B ] 立定跳远(二分)

题目描述 在运动会上&#xff0c;小明从数轴的原点开始向正方向立定跳远。项目设置了 n n n 个检查点 a 1 , a 2 , ⋯ , a n a_1, a_2, \cdots , a_n a1​,a2​,⋯,an​ 且 a i ≥ a i − 1 > 0 a_i \ge a_{i−1} > 0 ai​≥ai−1​>0。小明必须先后跳跃到每个检查…...

现代网络安全攻防技术与发展现状

1. 引言 随着数字化转型进程的加速&#xff0c;全球信息化程度不断深入&#xff0c;网络安全问题日益凸显。根据最新的统计数据&#xff0c;2022年全球范围内的网络攻击事件较前一年增长了约41%&#xff0c;造成的经济损失高达超过6万亿美元。在这个背景下&#xff0c;了解现代…...