Nest.js —— A progressive Node.js framework
阿新 • • 發佈:2020-09-08
1.nest指令
nest <command> [options] Options: -h -v Commands: new|n [options] [name] build [options] [app] start [options] [app] generate|g [options] <schematic> [name] [path] schematics: application|app module|mo controller|co library|lib
2.控制器
控制器負責處理傳入的 請求 和向客戶端返回 響應 。
// cats.controller.ts import { Controller, Get } from '@nestjs/common'; class CreateCatDto { @ApiProperty({ description: '名稱' }) // 模型屬性 name: string } @Controller('cats') export class CatsController { @Get() findAll(): string { return 'This action returns all cats'; } @Post() create(@Body() body: CreateCatDto ) { return { success: true } } } // localhost:3000/cats
在上面的示例中,當對此端點發出 GET
請求時,Nest
會將請求路由到我們的使用者定義 findAll()
方法。請注意,我們在此處選擇的函式名稱完全是任意的。我們顯然必須宣告一個繫結路由的函式,但 Nest
不會對所選的函式名稱附加任何意義。
預設情況下,響應的狀態碼總是200,除了 POST 請求外,此時它是201,我們可以通過在處理程式層新增@HttpCode(...) 裝飾器來輕鬆更改此行為。
3.swagger
$ npm install --save @nestjs/swagger swagger-ui-express
開啟引導檔案(主要是 main.ts
)並使用 SwaggerModule
類初始化 Swagger:
const options = new DocumentBuilder() .setTitle('Cats example') .setDescription('The cats API description') .setVersion('1.0') .addTag('cats') .build(); const document = SwaggerModule.createDocument(app, options); SwaggerModule.setup('api-docs', app, document);
裝飾器
@ApiProperty({ description: '...', example: '...' }) // 模型屬性 @ApiTags() @ApiOperation({ summary: 'description...' }) // 介面描述
4.資料庫
$ npm install --save @typegoose/typegoose nestjs-typegoose mongoose NPM
$ npm install --save-dev @types/mongoose
連線mongodb
// db.module.ts import { Module } from "@nestjs/common"; import { TypegooseModule } from "nestjs-typegoose"; import { CatsModule } from "./cat.module.ts"; @Module({ imports: [ TypegooseModule.forRoot("mongodb://localhost:27017/nest", { useNewUrlParser: true, useUnifiedTopology: true, useCreateIndex: true, useFindAndModify: true }), CatsModule, ], }) export class ApplicationModule {}
定義模型
// cat.model.ts import { prop } from "@typegoose/typegoose"; export class Cat { @prop({ required: true }) name: string; }
全域性引用模型
// db.module.ts import { Module, Global } from '@nestjs/common'; import { DbService } from './db.service'; import { TypegooseModule } from 'nestjs-typegoose' import { Cat } from './models/cat.model' const models = TypegooseModule.forFeature([Cat]) @Global() @Module({ imports: [ ...(連線資料庫), models ], providers: [DbService], exports: [DbService, models], }) export class DbModule {}
依賴注入
// cats.controller.ts import { Controller } from '@nestjs/common'; import { InjectModel } from 'nestjs-typegoose'; import { Cat } from '@libs/db/models/user.model'; import { ApiTags } from '@nestjs/swagger'; @Controller('users') @ApiTags('使用者') export class UsersController { constructor(@InjectModel(Cat) private readonly model) {} }