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

EDD dengan pemancar peristiwa

DDD
Lepaskan: 2024-10-25 05:42:29
asal
338 orang telah melayarinya

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)
Salin selepas log masuk

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)
Salin selepas log masuk

Atas ialah kandungan terperinci EDD dengan pemancar peristiwa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan