nest学习笔记(一)

介绍

nest是一个用于构建高效,可拓展的nodejs服务端应用程序的框架,它使用渐进式javascript,使用Typescript构建并且完全支持Typescript,而且运行开发者使用javascript编写代码,提供了OOP、FP、FRP

nest的底层是基于express的,而且可以选择配置成fastify

感受

不得不说看到nest的第一感觉就是spring的高仿,一堆注解以及依赖注入ioc容器这块简直和spring一个模子刻出来的。

安装

如何安装nest,可以通过官方的nestcli来搭建项目,只需要运行下面命令

npm i -g @nestjs/cli
nest new project-name #project-name就是你的项目名称

运行下面的语句我们会看到,它要我们选择一个我们喜欢的包管理器,这里我们可以选择自己用的最习惯的一个,我这里选择的是pnpm,pnpm的话需要node版本16+才能运行
在这里插入图片描述

然后选择完回车就会进行下载相关依赖包信息

在这里插入图片描述

看到这个界面代表已经完成了。

运行测试

执行命令

cd project
pnpm run start

这个时候我们就可以看到nest应用已经运行了,我们访问一下地址http://127.0.0.1:3000,这里需要注意,要确保主机的3000端口没有被占用,才能访问成功hello world,否则就需要修改端口

修改端口

这边修改端口的话,我们只需要在项目根目录的main.ts去修改即可

//这里的3000可以改成其他的端口号
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';async function bootstrap() {const app = await NestFactory.create(AppModule);await app.listen(3000);
}
bootstrap();

目录结构

关于nest的目录结构介绍

在这里插入图片描述

dist/

该文件是nest打包之后的一个结果文件夹目录。

node_modules

该文件用于存放项目里所有依赖包

src

这里是主要的代码工作区,代码基本都是在这个文件里面编写

test

这个文件夹主要是单元测试的时候使用的,如果需要做单元测试的时候,就可以在这个文件夹里面创建文件

.eslintrc.js

这个文件是配置eslint的一些校验规则,主要是为了约束代码的规范

.gitignore

这个文件是设置git仓库的一个忽略文件,针对于nest项目的

.prettierrc

这个文件是对于prettier代码风格统一插件的一个配置文件,我们可以选择我们比较喜欢合适的一种风格来进行配置

nest-cli.json

这个文件主要是定制nest cli插件的一个行为,会影响生成的代码结构,构建过程以及CLI操作的默认行为

package.json

项目的基本依赖系信息

tsconfig.build.json

主要是用于构建流程,自动糊构建使用,在nest中它集成了tsconfig.json

tsconfig.json

用于写ts相关的一些配置信息,让我们在项目中更好的去使用ts

Helloworld

我们刚才看到了nest的一个基本安装启动流程,接着说说他helloworld是怎么实现的。首先nestjs也有一个入口文件,默认是src目录下的main.ts

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();

代码很少,这里的boostrap是入口的方法,首先会从nestjs核心包导入nestFactory,然后导入app.module,通过NestFactory去创建AppModule,这里意味着app.module就是整个应用的根模块,复制初始所有子模块和依赖项。

app.module

根模块

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';@Module({imports: [],controllers: [AppController],providers: [AppService],
})
export class AppModule {}

这里看到在app.module里面使用了module这个装饰器,导入了controller以及service,然后这个注解里面传递一个对象,controllers是一个数组,

#import 属性是一个数组,用于列出模块需要导入的其他模块#controller 这里用来记录模块里面的控制器列表,也是一个数组#providers 该属性依然是个数组,列出所有这个模块的服务或者提供者,service在这里会被注册,被其他的控制器进行使用,它会自动注入服务

app.controller.ts

import { Controller, Get } from '@nestjs/common';
import { AppService } from './app.service';@Controller()
export class AppController {constructor(private readonly appService: AppService) {}@Get()getHello(): string {return this.appService.getHello();}
}

这里的代码也是,导入Controller和Get的装饰器,在AppController类上加上@controller表示这是一个控制器,这里可以设置控制器的名称,在括号里传递,然后@Get则表示,这是哪种请求的类型,这里也可以括号里传递路径,然后getHello里面调用了this.appService.getHello()。

在上面的constructor,使用private readonly关键字让appService是私有只读的属性,规避掉一些无厘头的操作。

app.service.ts

import { Injectable } from '@nestjs/common';@Injectable()
export class AppService {getHello(): string {return 'Hello World!';}
}

加入了Injectable表示这个会自动注入,这里的getHello返回的是Hello worlld,所以页面显示的也是hello world。

这样一个简单的helloworld就实现了。 nest还为我们提供了很多命令,可以让我们很方便的去生成文件,这个就后面在分享了,今天关于nestjs的简单分享就到这里了

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

Kolla-Ansible的确是不支持CentOS-Stream系列产品了

看着OpenStack最新的 C 版本出来一段时间了,想尝个鲜、用Kolla-Ansible进行容器化部署,结果嘛。。。 根据实验结果,自OpenStack Bobcat版本开始,Kolla-Ansible就适合在CentOS系列产品上部署了,通过对 Bobcat和Caracal…

springcloud接入skywalking作为应用监控

下载安装包 需要下载SkyWalking APM 和 Java Agent 链接: skywalking 安装 下载JDK17(可不配置环境变量) 目前skywalking 9.0及以上版本基本都不支持JDK8,需要JDK11-21,具体版本要求在官网查看。 我这里使用的是skywalking9.…

每日好题(2)

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> int main(void) {int arr[6] { 1,2,3,4,5,6 };char* p arr;int sz sizeof(arr) / sizeof(arr[0]);for (int a 0; a < sz; a){printf("%d\n", *p);p 4;}return 0; }这串代码遍历打印数组的结果是没…

BGP选路之Preferred value

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由&#xff0c;然后将该最优BGP路由与去往同一目标网络的其他协议路由进行比较&#xff0c;从而决定是否将该最优…

小程序多排数据横向滚动实现

如何实现多排数据滚动效果 swiper 外部容器 swiper-item 每一页的数据 因为现在有多排数据,现在在swiper-item 中需要循环一个数组 初版 <template><view><view class"container"><view class"swiper-box"><swiper class&qu…

操作系统——笔记(1)

操作系统是管理计算机硬件资源&#xff0c;控制其他程序运行并为用户提供交互操作界面的系统软件的集合&#xff0c;控制和管理着整个计算机系统的硬件和软件资源&#xff0c;是最基本的系统软件。 常见的操作系统&#xff1a;ios、windows、Linux。 计算机系统的结构层次&am…

“论软件测试中缺陷管理及其应用”写作框架,软考高级论文,系统架构设计师论文

原创范文 软件缺陷指的是计算机软件或程序中存在的某种破坏正常运行能力的问题、错误&#xff0c;或者隐藏的功能缺陷。缺陷的存在会导致软件产品在某种程度上不能满足用户的需要。在目前的软件开发过程中&#xff0c;缺陷是不可避免的。软件测试是发现缺陷的主要手段&#xf…

计算机网络基础:2.TCP/IP模型中的各层协议、IP地址

一、TCP/IP模型中的各层协议 接着第一篇餐厅运营的例子来解释一下TCP/IP五层模型中的每一层协议&#xff1a; 1. 应用层&#xff08;餐饮一体机&#xff09; 在TCP/IP模型中&#xff0c;应用层直接与用户交互&#xff0c;提供网络服务。这一层将OSI模型的应用层&#xff08;点…

colab进行keras入门随机数和标签的一点思考,例如shape和Dense等

keras官方中文文档 pip install kerasfrom keras import layers from keras import modelsmodel.add(layers.Dense(32,activationrelu,input_shape(100,)))# 添加多个Dense层 model.add(layers.Dense(10,activationsoftmax)) model.compile(optimizerrmsprop,losscategorical_…

pikachu之sql lnjet 字符型注入

先测试一下闭合 注释符号&#xff1a;-- 注释符号可以忽略其后的内容&#xff0c;使得后续的原始查询内容不会影响我们注入的SQL代码。 条件测试&#xff1a;通过and 11和and 12分别测试真假条件&#xff0c;可以判断输入是否成功闭合&#xff0c;并且可以检测注入是否成功。 …

Kotlin 协程 — 基础

Kotlin 协程 — 基础 协程已经存在一段时间了&#xff0c;关于它的各种文章也很多。但我发现想要了解它还比较费时&#xff0c;所以我花了一段时间才真正理解了协程的基础知识以及它的工作原理。因此&#xff0c;我想分享一些我理解到的内容。 什么是协程&#xff1f; 协程代表…

关于OLED的I2C手册记录

首先我们从淘宝上面找到对应OLED 4pin iic驱动的ssd1306手册&#xff0c;它有多种的驱动方式&#xff0c;我们只需要看看他这个i2c模式。 我们可以从中看到 Slave address R/W后面的#代表低电平是W。 SA0是它的一个 slave address bit 可以使用 这两个都可以作为OLED的 设备…

分布式事务与Seata落地

分布式事务与Seata落地 一、事务基础 1.1 本地事务 事务指的就是一个操作单元, 在这个操作单元中的所有操作最终要保持一致的行为, 要么所有操作都成功, 要么所有的操作都被撤销。 1.2 本地事务特性 本地事务四大特性: ACID A: 原子性(Atomicity), 一个事务中的所有操作, …

如何通过一条SQL变更多个分库分表?

数据库发展到今天&#xff0c;分库分表已经不是什么新鲜话题了&#xff0c;传统的单节点数据库架构在数据量和访问频次达到一定规模时&#xff0c;会出现性能瓶颈和扩展性问题&#xff0c;而分库分表技术通过将数据分散到多个数据库实例中来分担负载&#xff0c;从而提升系统的…

数字信号||离散序列的基本运算(2)

实验二 离散序列的基本运算 一、实验目的 (1)进一步了解离散时间序列时域的基本运算。 (2)了解MATLAB语言进行离散序列运算的常用函数&#xff0c;掌握离散序列运算程序的编写方法。 二、实验涉及的MATLAB子函数 1.find 功能&#xff1a;寻找非零元素的索引号。 调用格…

BGP选路之Local Preference

原理概述 当一台BGP路由器中存在多条去往同一目标网络的BGP路由时&#xff0c;BGP协议会对这些BGP路由的属性进行比较&#xff0c;以确定去往该目标网络的最优BGP路由。BGP首先比较的是路由信息的首选值&#xff08;PrefVal)&#xff0c;如果 PrefVal相同&#xff0c;就会比较本…

Linux_权限3

Linux所对应的文件类型 1.在Win下&#xff0c;有文件类型&#xff0c;通常通过后缀标识 日常用的就是windows系统这里不做举例. 2.Linux的文件类型不通过后缀区分&#xff08;不代表Linux不用后缀) 其中需要注意的是第一个字符表示文件类型的含义 - :普通文件, 文本, 源代码…

解决:uniapp 小程序 使用swiper 内部嵌套另外一个拥有左右滑动组件导致滑动冲突

解决办法 在swiper-item 内增加这个属性进行包裹 touchmove.stop <div touchmove.stop><qiun-data-charts type"area" :opts"optsStg" :chartData"dateDataStg" /> </div>

嘉立创|如何在原理图中框选任意元件

点击编辑—选择对象—对边形内部 便可以任意框选 选中之后&#xff0c;进入pcb板界面也选中了相同器件

使用kali对操作系统和网络服务类型进行探测

1&#xff0e;在Kali终端中输入命令“nmap –sS –n -O 192.168.2.2”&#xff0c;探测目标主机的操作系统类型 2&#xff0e; 在Kali终端中输入命令“nmap –sV -n 192.168.2.2”&#xff0c;探测目标主机开启的网络服务类型 3.在Kali终端中输入命令“nmap –A -n 192.168.2.2…