复位新创建一个nest新项目
// 全局性组装nestjs钢管脚手架
npm i -g @nestjs/cli
// 应用钢管脚手架新建工程
nest new project-name
文件名称
.
├── README.md // 说明文件
├── dist // 装包产生的文档
│ ├── app.controller.d.ts
│ ├── app.controller.js
│ ├── app.controller.js.map
│ ├── app.module.d.ts
│ ├── app.module.js
│ ├── app.module.js.map
│ ├── app.service.d.ts
│ ├── app.service.js
│ ├── app.service.js.map
│ ├── common
│ ├── main.d.ts
│ ├── main.js
│ ├── main.js.map
│ ├── modules
│ └── tsconfig.build.tsbuildinfo
├── nest-cli.json // nestjs环境变量
├── package.json // npm 包文档
├── src // 开发设计源代码文档
│ ├── app.controller.spec.ts
│ ├── app.controller.ts // 控制板路由器
│ ├── app.module.ts // 控制模块文档
│ ├── app.service.ts // 服务项目文档
│ └── main.ts // 通道主文件
├── tsconfig.build.json
├── tsconfig.json
└── yarn.lock
运行nest服务项目
yarn start:dev
or
npm run start:dev
[10:01:56 PM] Starting compilation in watch mode...
[10:01:58 PM] Found 0 errors. Watching for file changes.
[Nest] 36861 - 01/31/2023, 10:01:59 PM [NestFactory] Starting Nest application...
[Nest] 36861 - 01/31/2023, 10:01:59 PM [InstanceLoader] AppModule dependencies initialized 15ms
[Nest] 36861 - 01/31/2023, 10:01:59 PM [RoutesResolver] AppController {}: 8ms
[Nest] 36861 - 01/31/2023, 10:01:59 PM [RouterExplorer] Mapped {, GET} route 3ms
[Nest] 36861 - 01/31/2023, 10:01:59 PM [NestApplication] Nest application successfully started 2ms
默认设置启动地点是http://localhost:3000
页面中显示的是默认demo hello word
nest中基础概念
nest控制板
什么叫控制板,控制板负责处理传到请求和向手机客户端回到回应
控制板的目的在于接受运用的特殊要求。路由器体制操纵哪一个控制器接收什么要求。一般,每一个控制板有好几个路由器,不同的路由能够运行不一样的操作。
为了能创建一个最基本的控制板,我们使用类及装饰器
。装饰器将类与所需要的数据库密切相关,从而使 Nest 可以建立路由器投射(将要求关联到对应的控制板)。
新创建一个控制板
// 建立控制板 hello
nest g controller hello
or
nest g co hello
nest服务项目
服务项目能是service还可以是provider,都能通过constructor引入依存关系。服务项目本质上是一个@Injectable()
装饰器注释的类,等同于mvc里的model层
新创建一个服务项目
// 建立服务项目 hello
nest g service hello
or
nest g s hello
nest控制模块
控制模块是有着 @Module()
装饰器的类。 @Module()
装饰器带来了数据库,Nest 用它机构应用软件构造,每一个 Nest 应用软件至少有一个控制模块,即根控制模块。根控制模块是 Nest 逐渐分配应用软件树地区。实际上,根控制模块有可能是应用软件中唯一的控制模块,尤其是当应用软件很钟头,但对于大中型程序流程而言这没有任何意义。在大多数情况下,你将拥有多个控制模块,各个控制模块都是有一组紧密相关的作用。
@module() 装饰器接纳一个叙述控制模块属性目标:
providers
由 Nest 注入器创建对象的服务提供者,并可以起码在全部模块中分享controllers
务必建立的一组控制板imports
导进模块目录,这种控制模块导出来了此模块中需要服务提供者exports
由本控制模块给予并需在别的模块中可利用的服务提供者的子集合
新创建一个控制模块
// 建立控制模块 hello
nest g module hello
or
nest g mo hello
每一个控制模块都是一个分享控制模块。一旦建立就会被随意控制模块多次重复使用。
立即生成一个程序模块的编码网络资源
// 创建一个程序模块网络资源
nest g resource hello
or
nest g res hello
nest的架构和编码排列方式
nest的代码要以模块化的方法组合,每一块的功效都能够界定成一个控制模块,从程序流程的入口文档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();
根据编码能够得知,根据NestFactory来创建一个应用案例,案例中根据AppModule,随后app运行在3000端口号洗,正在看一下这个模块是什么
import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
@Module({
imports: [],
controllers: [AppController],
providers: [AppService],
})
export class AppModule {}
AppModule类根据@Module装饰器变成一个控制模块,全部应用软件就是这个样子一个一个的控制模块所组成的,随后一个控制模块又由一个个的服务和控制板构成,nest的代码基础构成方法就是这个样子,随后去看看控制板与服务
控制板
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();
}
}
服务项目
import { Injectable } from '@nestjs/common';
@Injectable()
export class AppService {
getHello(): string {
return 'Hello World!';
}
}