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 查看哦

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

这都是什么?

idea是我的编辑器配置

node_module 是需要用到的包

src 是项目的根目录

test  是测试文件

README 是项目描述

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

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

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

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

Main

 

        在这里就是对于整个nest项目的一些配置了

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

        一般包括Imports:导入其他模块,形成模块之间的依赖关系;Controllers:处理请求和返回响应,负责调用服务;Providers(通常是 Service):处理业务逻辑,返回结果;Exports:将模块的某些功能(如服务)导出,以便其他模块使用

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

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';@Module({imports: [],  //导入第三方模块服务使用的,和使用import导入包有异曲同工之妙controllers: [AppController], //处理本模块使用到的处理http请求providers: [AppService], //对应着处理http请求的方法
})
export class AppModule {}

Controller 

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

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

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';@Controller()
export class AppController {constructor(private readonly appService: AppService) {}@Get() //处理get请求getHello(): string {return this.appService.getHello(); //对应的处理逻辑}
}

        这里有很多的装饰器,什么是装饰器,就是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的微服务,高并发生态也不错啊.所以他其实很适合中小企业的后端开发的,可是,国内太少一肩挑的了,只能期望自己越来越强吧,加油!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.pswp.cn/pingmian/82456.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Streamlit 项目知识点总结

目录 1. 单选框、下拉框格式化 2. 多媒体资源的引用 2.1 搭建一个简易的http服务器 2.2 约定多媒体资源的输入格式 2.3 解析多媒体资源 3. 设置页面的全局背景图片 4. 输出流式文本(类似打字效果) 4.1 使用内置的 st.write_stream 方法实现 4.2…

maven模块化开发

使用方法 将项目安装到本地仓库 mvn install 的作用 运行 mvn install 时,Maven 会执行项目的整个构建生命周期(包括 compile、test、package 等阶段),最终将构建的 artifact 安装到本地仓库(默认路径为 ~/.m2/repos…

(11)Service Mesh架构下Java应用实现零信任安全模型

Service Mesh架构下Java应用实现零信任安全模型 📌 TL;DR: 本文详细介绍如何在Service Mesh架构中实现零信任安全模型,包括身份认证、授权控制、加密通信和持续监控四大核心技术,以及与Istio、Envoy等组件的集成方案。 目录 零信任安全模型概述关键技术实现最佳实践Service…

修改 K8S Service 资源类型 NodePort 的端口范围

在 Kubernetes 中,Service 类型为 NodePort 时,默认分配的端口范围为 30000~32767。如果你希望使用自定义端口(如 8080、8888 等),就需要修改 kube-apiserver 的默认配置。 本文将详细介绍如何修改 Kubernetes 中 Nod…

MySQL 可观测性最佳实践

MySQL 简介 MySQL 是一个广泛使用的开源关系型数据库管理系统(RDBMS),以其高性能、可靠性和易用性而闻名,适用于各种规模的应用,从小型网站到大型企业级系统。 监控 MySQL 指标是维护数据库健康、优化性能和确保数据…

CentOS安装最新Elasticsearch8支持向量数据库

大家都知道Elasticsearch是支持向量的存储和查询的,今天我们来介绍下如何安装支持向量数据库的Elasticsearch , 操作环境是CentOS。 成功安装截图 大家进入系统shell,跟我执行下面命令进行安装。 更新系统 [rootlocalhost ~]# sudo yum u…

SDL2常用函数SDL事件处理:SDL_Event|SDL_PollEvent

SDL_Event SDL_Event是个联合体,是SDL中所有事件处理的核心。 SDL_Event是SDL中使用的所有事件结构的并集。 只要知道了那个事件类型对应SDL_Event结构的那个成员,使用它是一个简单的事情。 下表罗列了所有SDL_Event的所有成员和对应类型。 Uint32typ…

webpack吐环境分析

需要解决的问题 扣取下来的webpack文件过大 解决思路 用ast将需要的代码扣下来 结果展示 实现步骤 第一步:我们得知道需要哪些模块 在入口处,增加模块记录 第二步,分析ast代码 通过分析发现,key 有三种值 分别为NumbericLiteral、StringLi…

微软语音合成助手资源下载

微软语音合成助手资源下载 【下载地址】微软语音合成助手资源下载 微软语音合成助手是一款基于先进AI技术的文本转语音工具,能够将文字内容快速转换为自然流畅的语音。它支持高度自定义的语音参数,包括语速、音调、发音和停顿等,满足多样化需…

青少年编程与数学 02-020 C#程序设计基础 01课题、C#编程概要

青少年编程与数学 02-020 C#程序设计基础 01课题、C#编程概要 一、微软.NET开发平台1. 核心组件2. 特点3. 应用场景4. 开源与社区5. 版本与更新6. 学习资源 二、C# 编程语言1. 历史背景2. 语言特性(1)面向对象(2)类型安全&#xf…

图片文件未正确加载​—— Webpack 无法正确解析图片,生成了一个空的 Base64 URL

如果你打印出的图片 URL 是 data:image/png;base64, 后面没有实际的 Base64 数据,可能有以下几种原因: ​​1. 图片文件未正确加载​​ ​​可能原因​​:图片路径错误,导致 Webpack 无法正确解析图片,生成了一个空的…

3D打印仿造+ AI大脑赋能,造出会思考的全景相机

在自然界的生存竞赛里,节肢动物堪称视觉界的 "卷王"!那些长着复眼的小机灵鬼,比如蜜蜂、蜻蜓,别看个头小,视觉能力却超强。 现在,科学家把它们的眼睛 " 偷"过来啦 —— 不是真偷&…

rabbitmq单机多实例部署

RabbitMQ 单实例部署 单实例部署是指在一台服务器上运行一个 RabbitMQ 实例。这种部署方式适用于小型应用或开发环境,配置简单,资源占用较少。单实例部署的核心是安装 RabbitMQ 并启动服务,通常需要配置 Erlang 环境,因为 RabbitMQ 是基于 Erlang 编写的。单实例部署的优势…

知识宇宙-职业篇:后端工程师

名人说:博观而约取,厚积而薄发。——苏轼《稼说送张琥》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 目录 一、后端工程师的定义与职责1. 什么是后端工程师?2. 主要工作职责 二、…

机试 | vector/array Minimum Glutton C++

题目地址 &#xff1a; C - Minimum Glutton #include<stdio.h> #include<iostream> #include<vector> #include<algorithm> using namespace std; int main() {//N:菜肴数&#xff0c;X&#xff1a;总甜度阈值&#xff0c;Y&#xff1a;总咸度阈值int…

【Django ORM】三万字了解Django ORM的基本概念和基本使用

第一章 Django ORM 概述 1.1 什么是Django ORM 1.1.1 ORM的基本概念 ORM 即对象关系映射&#xff08;Object Relational Mapping&#xff09;&#xff0c;它是一种编程技术&#xff0c;用于在面向对象编程语言&#xff08;如 Python&#xff09;和关系型数据库&#xff08;如…

在springboot项目中是否可以使用两个不同地址的redis

在Spring Boot项目中可以通过多数据源配置的方式使用两个不同地址的Redis实例。以下是具体实现方案 1.依赖配置 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId><exclusio…

JMeter 教程:监控性能指标 - 第三方插件安装(PerfMon)

目录 【简单介绍】 ✅ PerfMon 插件是什么&#xff1f; &#x1f6e0;️ 安装 PerfMon 插件 方法一&#xff1a;使用 JMeterPluginsManager 安装&#xff08;推荐&#xff09; &#x1f50c; 安装完成后组件介绍 &#x1f310; 服务端安装 ServerAgent&#xff08;用于被…

【后端高阶面经:数据库篇】19、分库分表查询困境:无分库分表键时的高效应对

一、分库分表下的无分片键查询困境 在分布式数据库架构中,分库分表通过分片键(如买家ID)将数据分散存储,显著提升了单表性能和系统扩展性。然而,当业务需要从非分片键维度(如卖家ID)进行查询时,传统架构暴露出以下核心问题: 1.1 跨分片扫描的性能灾难 数据分散性:以…

ARM架构

目录 哈佛结构 arm指令格式 有符号数的溢出&#xff08;8bit)​ 无符号数的进位/借位 CPSR&#xff08;当前程序状态寄存器&#xff09; ARM模式 arm异常类型 ARMv7架构异常向量表 arm异常的处理流程 arm寄存器 堆栈指针寄存器 arm模式切换流程 LDR指令、STR指令 指…