Rumah >hujung hadapan web >tutorial js >EDD dengan pemancar peristiwa

EDD dengan pemancar peristiwa

DDD
DDDasal
2024-10-25 05:42:29341semak imbas

EDD with event emitters

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn