JSバックエンドフレームワークNest.jsエントリ制御レイヤー、コントローラー(1)

注:この記事は、nestjsを初めて学習した後のブロガーの知識と理解のみを記録しています。経験はまだ浅く、記事の内容は参照用です。エラーがあれば訂正してください。

制御層(コントローラー)

この層の責任:要求処理、ビジネス呼び出し、応答構造
。HTTP要求および応答メッセージ構造に精通していない人は、最初にブログを読むことができます:https://blog.csdn.net/jw2268136570/article/details/103216174

  • 構成:ルートモジュール(app.module.ts)でコントローラーコントローラーを構成します:[AppController]、

0.シングルスレッド処理

  • Node.js 要求/応答マルチスレッドステートレスモデルに従わず、各要求はメインスレッドによって処理されます。
  • 非同期操作が含まれている場合、または要求の完全なサイクルに含まれている可能性がある場合は、非同期/待機を非同期処理に使用できます

1.リクエスト処理

マッチリクエスト
  • マッチング処理:デコレータは、リクエストとコントローラ間のマッピングを確立します。
  • マッチングルール:リクエストプレフィックスプレフィックス(クラスプレフィックス、メソッドプレフィックス、ワイルドカードサポート*)、リクエストメソッドGET / POST / .. ..
  • 動的URLマッチング
  • サブドメインルーティング:要求されたホストに応じて、インターフェイスの呼び出し権限を決定します
アクセスリクエスト
要請情報 デコレータへのアクセス 通常のオブジェクトアクセス
リクエスト @リクエスト() 必須
セッションのリクエスト @セッション() req.session
リクエストパラメータ @Param(key?:string) req.params /req.params [key]
リクエストパラメータ @Body(key?:string) req.body /req.body [key]
リクエストパラメータ @Query(key?:string) req.query /req.query [key]
リクエストヘッダー @Headers(name?:string) req.headers /req.headers [名前]
IPをリクエストする @Ip() req.ip
  • 場合
import {
    
     Controller, Get ,Req, Ip, Post,Query,Param,Body} from '@nestjs/common';
import {
    
     AppService } from './app.service';
import {
    
     Request, query } from 'express';
// import {CreateCatDto} from './DTO/catDto'
class CreateCatDto {
    
    
  readonly name: string;
  readonly age: number;
  readonly breed: string;
}
@Controller()
export class AppController {
    
    
  constructor(private readonly appService: AppService) {
    
    }

  @Get('test')
  getHello(@Req() request: Request, @Query('name') name:String,@Ip() ip:String): string {
    
    
    console.log(`请求参数name为(普通对象): ${
      
      request.query['name']}`)
    console.log(`请求参数name为(装饰器): ${
      
      name}`)
    console.log(`ip地址为(普通对象): ${
      
      request.ip}`)
    console.log(`ip地址为(装饰器): ${
      
      ip}`)
    return this.appService.getHello();
  }

  @Get(':id')
  findOne(@Param('id') id: string) {
    
    
    return `This action returns a #${
      
      id} cat`;
  }

  @Post()
  async create(@Body() createCatDto: CreateCatDto) {
    
    // POST请求参数获取,@Body()配合DTO类
    return 'This action adds a new cat';
  }
}

2.ビジネスコール

  • インポート: './ app.service'から{AppService}をインポートします。
  • 呼び出し:this.appService.getHello();を返します。

3.応答構造

アクセス応答
応答メッセージ デコレータへのアクセス 通常のオブジェクトアクセス
応答 @Response()@ Res()* res
ステータスラインを作成する
  • ステータスコード:@HttpCode(204)
応答ヘッダーを作成する
  • 応答ヘッダー:@Header( 'Cache-Control'、 'none')
応答本体を作成する
  • ページに戻る/基本タイプ
  • オブジェクト/配列を返す:JSONに自動的にシリアル化する
リダイレクト
  • 基本構文:@Redirect( 'https://nestjs.com')
  • 動的url:コントローラーメソッドreturn {url: 'https://docs.nestjs.com/v5/'};

おすすめ

転載: blog.csdn.net/jw2268136570/article/details/107770001