Membina aplikasi dipacu peristiwa dalam node.js menggunakan pemancar peristiwa. Modul terbina dalam yang menjadi teras kepada seni bina node.js. EventEmitter ialah kelas yang membantu kami mencipta corak pelanggan-penerbit dalam node.js.
Kami akan melihat cara menggunakan EventEmitter dengan membina aplikasi tempahan bas yang membolehkan pengguna menempah tempat duduk bas dan menerima pemberitahuan e-mel apabila tempahan berjaya. Bermula, kami akan menyediakan aplikasi ekspres ringkas dengan laluan /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)
Dalam laluan mudah ini, menambah logik untuk menghantar pemberitahuan e-mel terus ke sana akan menyebabkan api kami menjadi lebih perlahan. Jadi apa yang boleh kami lakukan ialah menggunakan EventEmitter apabila selepas menambah perjalanan ke pangkalan data kami, kami mengeluarkan acara bernama dan penyenarai akan memilih acara dan menghantar pemberitahuan. Begini cara kami boleh menambahnya.
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)
Atas ialah kandungan terperinci EDD dengan pemancar peristiwa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!