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
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/82456.shtml
英文地址,請注明出處:http://en.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指令 指…