JSバックエンドフレームワークNest.jsエントリミドルウェアaop、ミドルウェア(4)

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

側面として

この記事では一時的に詳細については説明しません

1.アスペクトタイプ:NestMiddlewareインターフェイス実装クラス

2.アスペクト入力

  • リクエストオブジェクト
  • 応答オブジェクト
  • 次の機能

3.セクション出力:次に次のセクションを入力します

4.使用シナリオの側面

  • 任意のコードを実行します。
  • 要求オブジェクトと応答オブジェクトに変更を加えます。
  • 要求と応答のサイクルを終了します。
  • スタック内の次のミドルウェア関数を呼び出します。
  • 現在のミドルウェア関数が要求と応答のサイクルを終了しない場合は、next()を呼び出して、次のミドルウェア関数に制御を渡す必要があります。それ以外の場合、リクエストは一時停止されます。

シンプルなケース

1.ミドルウェアの定義

  • 方法1:クラスミドルウェア
import {
    
     Injectable, NestMiddleware } from '@nestjs/common';
import {
    
     Request, Response } from 'express';
@Injectable()
export class LoggerMiddleware implements NestMiddleware {
    
    
  // 中间件定义:必须是NestMiddleware接口的实现类并且实现use方法,参数为请求、响应、转发到下一个中间件的方法
  use(req: Request, res: Response, next: Function) {
    
    
    console.log('Request...');
    next();
  }
}
  • 方法2:機能的なミドルウェア
export function logger(req, res, next) {
    
    
  	console.log(`Request...`);
  	next();
}

2.ミドルウェア登録

  • モジュール登録(app.module.ts)
import {
    
     Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
import {
    
     LoggerMiddleware } from './common/middleware/logger.middleware';
import {
    
     CatsModule } from './cats/cats.module';
import {
    
     CatsController } from './cats/cats.controller.ts';

@Module({
    
    
  imports: [CatsModule],
})
export class AppModule implements NestModule {
    
    
  // 中间件注册:不在@module中配置,而是在NestModule接口的configure方法中注册一个中间件消费者(MiddlewareConsumer)实例,在该实例中配置该中间件消费者的消费特征(应用哪个中间件、处理哪些请求、排除哪些请求)。
  configure(consumer: MiddlewareConsumer) {
    
    
    consumer
      .apply(LoggerMiddleware)// 可配置多个中间件
      .exclude(
    {
    
     path: 'cats', method: RequestMethod.GET },
    {
    
     path: 'cats', method: RequestMethod.POST },
    'cats/(.*)',
  )
      // forRoutes配置经过中间件的请求有哪些,可接受一个字符串、多个字符串、对象、一个控制器类甚至多个控制器类,传对象时path属性支持通配符*。
      .forRoutes(CatsController);
  }
}
  • グローバル登録(main.ts)
const app = await NestFactory.create(AppModule);
app.use(logger);
await app.listen(3000);

おすすめ

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