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

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

相关文章:

  • LeetCode 118 题解--杨辉三角
  • leetcode每日一题(好几天之前的) -- 3068.最大节点价值之和
  • 什么是可重组机器人?
  • 【Day38】
  • SwaggerEndPoints 配置访问外部 Swagger 文档
  • 使用蓝耘元生代 MaaS 平台 API 工作流调用技巧与实践体验
  • 九级融智台阶与五大要素协同的量子化解析
  • 仿盒马》app开发技术分享-- 确认订单页(数据展示)(端云一体)
  • 迪宇电力绝缘胶垫四大优势,用特殊橡胶配方制成,具备多项实用优势
  • Day31 -js应用 -实例:webpack jQuery的使用及其隐含的安全问题
  • MySQL 窗口函数深度解析:语法、应用场景与性能优化
  • 理解vue-cli 中进行构建优化
  • 不同电脑同一个网络ip地址一样吗?如何更改
  • HTML Day02
  • C++—decltype
  • 大模型(5)——编码器(Encoder)、解码器(Decoder)
  • 大模型微调(面经总结)
  • Linux编译器——gcc/g++的使用
  • 实时数仓和离线数仓的区别是什么?企业如何选择合适的数仓架构?
  • 华为云Flexus+DeepSeek征文|ModelArts Studio开通DeepSeek-V3与R1商用服务实践与体验
  • 做网站需要买ip地址吗/免费线上培训平台
  • 做游戏出租的网站好/互联网推广渠道
  • 有什么做任务拿钱的网站/成都网站seo诊断
  • 建设信息网怎么进入/seo薪资seo
  • 网站建设 技术指标/企业软文营销
  • 苏州建厂/网站优化软件哪个好