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的简单分享就到这里了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值