Erstellen einer ereignisgesteuerten Anwendung in node.js mithilfe von Ereignisemittern. Ein integriertes Modul, das den Kern der Architektur von node.j bildet. Der EventEmitter ist eine Klasse, die uns hilft, ein Publisher-Subscriber-Muster in node.js zu erstellen.
Wir werden sehen, wie man EventEmitter verwendet, indem wir eine Busbuchungsanwendung erstellen, mit der Benutzer Bussitze buchen können und eine E-Mail-Benachrichtigung erhalten, wenn die Buchung erfolgreich ist. Zu Beginn richten wir eine einfache Express-Anwendung mit einer /book-Route ein.
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)
Bei diesem einfachen Weg führt das Hinzufügen der Logik zum direkten Senden von E-Mail-Benachrichtigungen dazu, dass unsere API etwas langsamer wird. Wir können also einen EventEmitter verwenden, wenn wir nach dem Hinzufügen der Reise zu unserer Datenbank ein benanntes Ereignis ausgeben und ein Listener das Ereignis auswählt und die Benachrichtigung sendet. So können wir das hinzufügen.
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)
Das obige ist der detaillierte Inhalt vonEDD mit Ereignisemittern. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!