ما هي الأحداث؟
الأحداث هي إشارات أو إشعارات تشير إلى حدوث إجراء أو تغيير في الحالة. في سياق التطبيقات، تسمح الأحداث لأجزاء مختلفة من النظام بالتواصل بطريقة غير متزامنة ومنفصلة. يعد هذا مفيدًا بشكل خاص في بنيات الخدمات الصغيرة، حيث تحتاج إلى مكونات لتعمل بشكل مستقل ولكن لا تزال قادرًا على "الاستماع" والتفاعل مع التغييرات التي تحدث في مكان آخر في النظام.
الأحداث في NestJS
في NestJS، يتم تنفيذ الأحداث بطريقة بسيطة وبديهية باستخدام مكتبة EventEmitter2، وهي امتداد لـ Node.js EventEmitter الأصلي، مع المزيد من الميزات. بعد ذلك، دعونا نرى كيفية تكوين واستخدام الأحداث في NestJS.
تكوين الأحداث في NestJS
أولاً، تحتاج إلى تثبيت الحزمة @nestjs/event-emitter، والتي توفر التكامل الكامل بين EventEmitter2 وNestJS:
npm install @nestjs/event-emitter
بعد تثبيت الحزمة، قم باستيراد وحدة EventEmitterModule إلى الوحدة الرئيسية لتطبيقك:
import { Module } from '@nestjs/common'; import { EventEmitterModule } from '@nestjs/event-emitter'; @Module({ imports: [ EventEmitterModule.forRoot(), // Importando o EventEmitterModule // outros módulos ], }) export class AppModule {}
مع تكوين الوحدة، يمكنك البدء في إنشاء الأحداث والتعامل معها في تطبيقك.
إنشاء وإصدار الأحداث
لنقم بإنشاء مثال أساسي حيث يتم إصدار حدث عند إنشاء مستخدم جديد.
1. إنشاء حدث:
أولاً، نحدد فئة لتمثيل حدثنا:
export class UserCreatedEvent { constructor( public readonly userId: string, public readonly email: string, ) {} }
2. انبعاث الحدث:
في الخدمة التي يتم فيها تنفيذ منطق إنشاء المستخدم، يمكنك إرسال الحدث بعد إنشاء المستخدم:
import { Injectable } from '@nestjs/common'; import { EventEmitter2 } from '@nestjs/event-emitter'; import { UserCreatedEvent } from './events/user-created.event'; @Injectable() export class UserService { constructor(private readonly eventEmitter: EventEmitter2) {} async createUser(email: string) { // Lógica para criar o usuário const userId = '12345'; // Exemplo de ID gerado // Emitir o evento const event = new UserCreatedEvent(userId, email); this.eventEmitter.emit('user.created', event); } }
هنا يتم إطلاق الحدث user.created كلما تم إنشاء مستخدم جديد.
الاستماع والرد على الأحداث
للرد على الأحداث المنبعثة، يمكنك إنشاء مستمعين، وهي وظائف أو أساليب سيتم استدعاؤها عند تشغيل الحدث المقابل.
1. إنشاء مستمع:
المستمع هو فئة تتفاعل مع حدث معين:
import { OnEvent } from '@nestjs/event-emitter'; import { Injectable } from '@nestjs/common'; import { UserCreatedEvent } from './events/user-created.event'; @Injectable() export class UserCreatedListener { @OnEvent('user.created') handleUserCreatedEvent(event: UserCreatedEvent) { console.log('Usuário criado com sucesso:', event.userId, event.email); // Lógica adicional, como enviar um e-mail de boas-vindas } }
2. تسجيل المستمع:
لكي يتعرف NestJS على المستمع، يجب تسجيله في الوحدة المقابلة:
import { Module } from '@nestjs/common'; import { UserService } from './user.service'; import { UserCreatedListener } from './listeners/user-created.listener'; @Module({ providers: [UserService, UserCreatedListener], }) export class UserModule {}
الآن، في كل مرة يتم فيها إطلاق الحدث user.created، سيتم استدعاء الأسلوب HandleUserCreatedEvent.
تطبيقات الأحداث المتقدمة
يمكن استخدام الأحداث في سيناريوهات مختلفة لتحسين بنية التطبيق:
خاتمة
يعد استخدام الأحداث في NestJS طريقة قوية لإنشاء أنظمة معيارية وقابلة للتطوير وسهلة الصيانة. من خلال التكامل مع EventEmitter2، يسهّل NestJS إنشاء الأحداث وبثها والاستماع إليها، مما يسمح لك بتنفيذ بنيات تعتمد على الأحداث ببساطة وفعالية. سواء كان ذلك للتواصل بين الخدمات الصغيرة أو للمعالجة غير المتزامنة، تعد الأحداث أداة أساسية في ترسانة أي مطور في NestJS.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3