Création d'une application basée sur les événements dans node.js à l'aide d'émetteurs d'événements. Un module intégré au cœur de l'architecture node.js. EventEmitter est une classe qui nous aide à créer un modèle éditeur-abonné dans node.js.
Nous verrons comment utiliser EventEmitter en créant une application de réservation de bus où les utilisateurs peuvent réserver des places de bus et recevoir une notification par e-mail lorsque la réservation est réussie. Pour commencer, nous allons mettre en place une application express simple avec un itinéraire /book.
index.js
import express from "express" import { addTrip } from "./utils" const app = express() app.post("/book", (req, res) = { const {origin, destination, date} = req.body; if (!(origin && destination && date)) { res.status(400).send("Invalid request") } addTrip({ origin, destination, date }).then((response) => { if (response.status) { // send notification to user // we can make a request to an email service (like resend) // to send the user the notification. But this will mean we'll have // to wait for a response from resend before sending a response to the client. // This makes the response time a bit longer } else { // somehting went wrong } }).catch((error) => { // an error occured res.status(400).send(error.message) }).finally(() => { res.status(200).send("Request Received") }) }) app.listen(3000)
Dans cette voie simple, l'ajout de la logique permettant d'envoyer des notifications par e-mail directement à cet endroit entraînera un peu plus lent de notre API. Donc, ce que nous pouvons faire, c'est utiliser un EventEmitter lorsqu'après avoir ajouté le voyage à notre base de données, nous émettons un événement nommé et un listeur sélectionnera l'événement et enverra la notification. Voici comment nous pouvons ajouter cela.
import express from "express" import EventEmitter from "node:events" // import the EventEmitter class import { addTrip } from "./utils" const app = express(); const myEmitter = new EventEmitter(); // We create an instance of the EventEmitter class // Let's setup a listener to listen for a named event, in this case 'booking' myEmitter.on("booking", (trip) => { // Make the call to your email service to send the email console.log(trip) }) app.post("/book", (req, res) = { const {origin, destination, date} = req.body; if (!(origin && destination && date)) { res.status(400).send("Invalid request") } addTrip({ origin, destination, date }).then((response) => { if (response.status) { // emit an event and the listener will pick it up let trip = response.data myEmitter.emit("book", trip) } else { // somehting went wrong } }).catch((error) => { // an error occured res.status(400).send(error.message) }).finally(() => { res.status(200).send("Request Received") }) }) app.listen(3000)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!