Maison  >  Article  >  interface Web  >  EDD avec émetteurs d'événements

EDD avec émetteurs d'événements

DDD
DDDoriginal
2024-10-25 05:42:29233parcourir

EDD with event emitters

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn