[Nestjs] Begrenzen Sie die Anzahl der Anfragen

Die Begrenzung der Anzahl der Anfragen in NestJS kann mithilfe von Middleware erreicht werden. Hier ist ein üblicher Weg:

  1. Erstellen Sie eine Middleware, die die Anzahl der Anfragen begrenzt: Erstellen Sie eine RateLimitMiddlewareMiddleware mit dem Namen, die verwendet wird, um die Anzahl der Anfragen zu begrenzen. In dieser Middleware können Sie die Logik zur Anforderungsbegrenzung mithilfe von Bibliotheken von Drittanbietern (z. B. Express-Rate-Limit, Fastify-Rate-Limit) implementieren, die bequeme Möglichkeiten zum Festlegen jeder IP-Adresse oder anderer Kennung bieten. Die Begrenzung der Anzahl von Anfragen.

    import { Injectable, NestMiddleware } from '@nestjs/common';
    import rateLimit from 'express-rate-limit';
    
    @Injectable()
    export class RateLimitMiddleware implements NestMiddleware {
      use(req: any, res: any, next: () => void): any {
        return rateLimit({
          windowMs: 5 * 60 * 1000, // 5分钟内
          max: 100, // 最多允许100次请求
          message: '请求过于频繁,请稍后再试。',
        })(req, res, next);
      }
    }
    

  2. Verwenden der Middleware im Root-Modul: Verwenden Sie im Root-Modul Ihrer NestJS-Anwendung (normalerweise app.module.ts) die Methode im globalen Bereich, use()um die Middleware anzuwenden.

    import { Module, NestModule, MiddlewareConsumer } from '@nestjs/common';
    import { RateLimitMiddleware } from './rate-limit.middleware';
    import { AppController } from './app.controller';
    import { AppService } from './app.service';
    
    @Module({
      controllers: [AppController],
      providers: [AppService],
    })
    export class AppModule implements NestModule {
      configure(consumer: MiddlewareConsumer) {
        consumer.apply(RateLimitMiddleware).forRoutes('*');
      }
    }
    

    Im obigen Code RateLimitMiddlewarewird auf alle Routen angewendet ( '*')

Auf diese Weise wird die Anzahl der Anfragen auf die maximale Anzahl von Anfragen pro IP-Adresse oder anderer Kennung innerhalb des angegebenen Zeitfensters begrenzt. Sie können die Fensterzeit und die maximale Anzahl der Anfragen entsprechend Ihren Anforderungen anpassen.

Beachten Sie, dass im obigen Beispiel express-rate-limitdie Bibliothek zum Implementieren der Anforderungsdrosselung verwendet wird. Wenn Sie Fastify oder ein anderes HTTP-Framework verwenden, können Sie die entsprechende Bibliothek auswählen, um ähnliche Funktionen zu implementieren.

Darüber hinaus können Sie die Middleware auch an die Geschäftsanforderungen anpassen, um die Logik zur Begrenzung der Anzahl der Anforderungen zu implementieren.

おすすめ

転載: blog.csdn.net/wuzhangting/article/details/132472395