Jadual Kandungan
1. Penggunaan awal
2. Aplikasi
Rumah hujung hadapan web tutorial js Acara modul terbina dalam Node.js, cara menggunakannya untuk melaksanakan model penerbitan dan langganan

Acara modul terbina dalam Node.js, cara menggunakannya untuk melaksanakan model penerbitan dan langganan

Sep 23, 2022 pm 08:11 PM
nodejs​ node.js node

Semua orang mesti biasa dengan model terbit-langgan Model ini memainkan peranan yang hebat dalam interaksi tak segerak dan boleh menjadikan struktur kod kami lebih jelas, lebih mudah dibaca dan lebih mudah diselenggara.

Acara modul terbina dalam Node.js, cara menggunakannya untuk melaksanakan model penerbitan dan langganan

Dalam node kita boleh menggunakan modul terbina dalam event untuk melaksanakan penerbitan- model langgan, yang Dalam artikel ini kita akan mempelajari event secara mendalam dan menunjukkan peranannya dalam pembangunan sebenar kita, mari mulakan! [Tutorial berkaitan yang disyorkan: tutorial video nodejs]

1. Penggunaan awal

Memperkenalkan modul terbina dalam acara.

// 引入内置模块event
const EventEmitter = require("events");
Salin selepas log masuk

Buat objek acara

eventModul terbina dalam pada asasnya ialah pembina, kita perlu lulus new operator untuk memanggilnya

// 创建event对象
const event = new EventEmitter();
Salin selepas log masuk

dengar acara

menggunakan event pada fungsi objek on untuk mentakrifkan acara mendengar, sintaksnya ialah: event.on(事件名,事件处理函数)

// 监听run事件
event.on("run", (data) => {
    console.log("run事件运行,参数为:", data);
});
Salin selepas log masuk

Peristiwa pencetus

Gunakan memancarkan pada objek event Berfungsi untuk mencetuskan acara yang dipantau, sintaksnya ialah: event.emit(需要触发的事件名,需要给事件处理函数传递的参数)

// 触发run事件
event.emit("run", "111111");
Salin selepas log masuk

Kod lengkap

// 引入内置模块event
const EventEmitter = require("events");
// 创建event对象
const event = new EventEmitter();

// 监听run事件
event.on("run", (data) => {
    console.log("run运行,参数为:", data);
});

// 触发run事件
event.emit("run", "111111");
Salin selepas log masuk

Hasil jalankan :

Acara modul terbina dalam Node.js, cara menggunakannya untuk melaksanakan model penerbitan dan langganan

❗️ Masalah dengan pemantauan acara berulang

== Nota: Apabila peristiwa yang sama Apabila dipantau beberapa kali, apabila peristiwa dicetuskan, semua fungsi pemprosesan acara acara ini akan dicetuskan pada masa yang sama==

Acara modul terbina dalam Node.js, cara menggunakannya untuk melaksanakan model penerbitan dan langganan

2. Aplikasi

Dalam bahagian sebelumnya Node.js | Membina pelayan bahagian belakang (termasuk penggunaan modul terbina dalam http | url | querystring) , terdapat kaedah yang menggunakan node untuk mensimulasikan get permintaan (memajukan data merentas domain) Kes:

const http = require("http");
const https = require("https");
// http和https的区别仅在于一个是http协议一个是https协议
const url = require("url");

const server = http.createServer();

server.on("request", (req, res) => {
    const urlObj = url.parse(req.url, true);

    res.writeHead(200, {
        "content-type": "application/json;charset=utf-8",
        "Access-Control-Allow-Origin": "http://127.0.0.1:5500",
    });

    switch (urlObj.pathname) {
        case "/api/maoyan":
            // 我们定义的httpget方法:使node充当客户端去猫眼的接口获取数据
            httpget((data) => res.end(data)); // 注意这里
            break;

        default:
            res.end("404");
            break;
    }
});

server.listen(3000, () => {
    console.log("服务器启动啦!");
});

function httpget(cb) {
    // 定义一个存放数据的变量
    let data = "";
    // 因为猫眼的接口是https协议的,所以我们需要引入https
    // http和https都具有一个get方法能够发起get请求,区别是一个是http协议,一个是https协议
    // http get方法第一个参数为接口地址,第二个参数为回调函数
    https.get(
        "https://i.maoyan.com/api/mmdb/movie/v3/list/hot.json?ct=%E8%A5%BF%E5%8D%8E&ci=936&channelId=4",
        (res) => {
            // http get方法获取的数据是一点点返回的,并不是直接返回全部
            // 监听data,当有数据返回时就会被调用
            res.on("data", (chunk) => {
                // 收集数据
                data += chunk;
            });
            // 监听end,数据返回完毕后调用
            res.on("end", () => {
                cb(data); // 注意这里
            });
        }
    );
}
Salin selepas log masuk

Nota baris 19 dan 49 kod di atas:

httpget((data) => res.end(data)); // 注意这里
Salin selepas log masuk
cb(data); // 注意这里
Salin selepas log masuk

Dalam contoh ini, kita lulus dalam fungsi httpget Fungsi panggil balik digunakan untuk menerima data yang diperolehi oleh fungsi httpget Kaedah penulisan ini sebenarnya tiada masalah dan sering digunakan dalam pembangunan.

Tetapi dalam sesetengah kes, terutamanya apabila fungsi bersarang dalam berbilang lapisan dan memanggil (seperti contoh di bawah), kaedah penulisan ini tidak cukup elegan kerana struktur kodnya tidak begitu jelas . , logiknya tidak boleh difahami secara intuitif:

function user() {
    getUser((data) => {
        console.log(data);
    });
}

function getUser(cb) {
    // ....
    const id = 1;
    getUserInfo(cb, id);
}

function getUserInfo(cb, id) {
    // ....
    const name = id + "Ailjx";
    cb(name);
}
Salin selepas log masuk

Mari kita gunakan modul terbina dalam event untuk mengubah kes node simulasi get permintaan (memajukan data merentas domain) :

const http = require("http");
const https = require("https");
const url = require("url");
const EventEmitter = require("events");
const server = http.createServer();

// 存放event对象
let event = "";

server.on("request", (req, res) => {
    const urlObj = url.parse(req.url, true);

    res.writeHead(200, {
        "content-type": "application/json;charset=utf-8",
        "Access-Control-Allow-Origin": "http://127.0.0.1:5500",
    });

    switch (urlObj.pathname) {
        case "/api/maoyan":
            event = new EventEmitter(); // 注意该位置
            // 监听事件
            event.on("resEnd", (data) => {
                res.end(data);
            });
            httpget();
            break;

        default:
            res.end("404");
            break;
    }
});

server.listen(3000, () => {
    console.log("服务器启动啦!");
});

function httpget() {
    let data = "";
    https.get(
        "https://i.maoyan.com/api/mmdb/movie/v3/list/hot.json?ct=%E8%A5%BF%E5%8D%8E&ci=936&channelId=4",
        (res) => {
            res.on("data", (chunk) => {
                data += chunk;
            });
            res.on("end", () => {
                // 触发事件并传递数据
                event.emit("resEnd", data);
            });
        }
    );
}
Salin selepas log masuk

Jalankan dan panggil antara muka /api/maoyan:

Acara modul terbina dalam Node.js, cara menggunakannya untuk melaksanakan model penerbitan dan langganan

Antara muka digunakan seperti biasa

Perhatikan di atas Lokasi kod new EventEmitter() ialah Jika new EventEmitter() adalah luaran, ia bersamaan dengan hanya mempunyai satu objek event global Setiap kali kita memanggil /api/maoyan antara muka, node akan mendengar acara resEnd baharu, yang akan menyebabkan acara resEnd dipantau berulang kali oleh :

Acara modul terbina dalam Node.js, cara menggunakannya untuk melaksanakan model penerbitan dan langganan

Jadi kita perlu menukar kod yang mencipta objek eventnew EventEmitter()Tuliskannya ke dalam cabang case antara muka, supaya apabila kita memanggil antara muka ini, objek event baharu akan dibuat 🎜> objek akan dilupuskan oleh mekanisme pelupusan sampah event jika ia ditamatkan , supaya tiada masalah JSperistiwa dipantau berulang kaliresEnd

Untuk lebih banyak pengetahuan berkaitan nod, sila. lawati:

tutorial nodejs!

Atas ialah kandungan terperinci Acara modul terbina dalam Node.js, cara menggunakannya untuk melaksanakan model penerbitan dan langganan. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Penjelasan grafik terperinci tentang memori dan GC enjin Node V8 Penjelasan grafik terperinci tentang memori dan GC enjin Node V8 Mar 29, 2023 pm 06:02 PM

Artikel ini akan memberi anda pemahaman yang mendalam tentang memori dan pengumpul sampah (GC) enjin NodeJS V8 saya harap ia akan membantu anda!

Artikel tentang kawalan memori dalam Node Artikel tentang kawalan memori dalam Node Apr 26, 2023 pm 05:37 PM

Perkhidmatan Node yang dibina berdasarkan bukan sekatan dan dipacu peristiwa mempunyai kelebihan penggunaan memori yang rendah dan sangat sesuai untuk mengendalikan permintaan rangkaian besar-besaran. Di bawah premis permintaan besar-besaran, isu yang berkaitan dengan "kawalan memori" perlu dipertimbangkan. 1. Mekanisme kutipan sampah V8 dan had ingatan Js dikawal oleh mesin kutipan sampah

Cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod Cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod Mar 28, 2023 pm 07:28 PM

Bagaimana untuk mengendalikan muat naik fail? Artikel berikut akan memperkenalkan kepada anda cara menggunakan ekspres untuk mengendalikan muat naik fail dalam projek nod saya harap ia akan membantu anda!

Mari bercakap secara mendalam tentang modul Fail dalam Node Mari bercakap secara mendalam tentang modul Fail dalam Node Apr 24, 2023 pm 05:49 PM

Modul fail ialah enkapsulasi operasi fail asas, seperti membaca/menulis/membuka/menutup/memadam fail, dsb. Ciri terbesar modul fail ialah semua kaedah menyediakan dua versi **segerak** dan ** asynchronous**, dengan Kaedah dengan akhiran penyegerakan adalah semua kaedah penyegerakan, dan kaedah yang tidak semuanya adalah kaedah heterogen.

Analisis mendalam tentang alat pengurusan proses Node 'pm2' Analisis mendalam tentang alat pengurusan proses Node 'pm2' Apr 03, 2023 pm 06:02 PM

Artikel ini akan berkongsi dengan anda alat pengurusan proses Node "pm2", dan bercakap tentang mengapa pm2 diperlukan, cara memasang dan menggunakan pm2, saya harap ia akan membantu semua orang!

PI Node Teaching: Apakah nod pi? Bagaimana cara memasang dan menyediakan nod pi? PI Node Teaching: Apakah nod pi? Bagaimana cara memasang dan menyediakan nod pi? Mar 05, 2025 pm 05:57 PM

Penjelasan dan Panduan Pemasangan Terperinci untuk Pinetwork Nodes Artikel ini akan memperkenalkan ekosistem pinetwork secara terperinci - nod pi, peranan utama dalam ekosistem pinetwork, dan menyediakan langkah -langkah lengkap untuk pemasangan dan konfigurasi. Selepas pelancaran Rangkaian Ujian Blockchain Pinetwork, nod PI telah menjadi bahagian penting dari banyak perintis yang aktif mengambil bahagian dalam ujian, bersiap sedia untuk pelepasan rangkaian utama yang akan datang. Jika anda tidak tahu kerja pinet, sila rujuk apa itu picoin? Berapakah harga untuk penyenaraian? Penggunaan PI, perlombongan dan analisis keselamatan. Apa itu Pinetwork? Projek Pinetwork bermula pada tahun 2019 dan memiliki syiling pi cryptocurrency eksklusifnya. Projek ini bertujuan untuk mewujudkan satu yang semua orang boleh mengambil bahagian

Mari kita bincangkan tentang gelung acara dalam Node Mari kita bincangkan tentang gelung acara dalam Node Apr 11, 2023 pm 07:08 PM

Gelung peristiwa ialah bahagian asas Node.js dan mendayakan pengaturcaraan tak segerak dengan memastikan bahawa utas utama tidak disekat Memahami gelung peristiwa adalah penting untuk membina aplikasi yang cekap. Artikel berikut akan memberi anda pemahaman yang mendalam tentang gelung acara dalam Node.

Ketahui lebih lanjut tentang Penampan dalam Node Ketahui lebih lanjut tentang Penampan dalam Node Apr 25, 2023 pm 07:49 PM

Pada mulanya, JS hanya berjalan pada bahagian penyemak imbas Mudah untuk memproses rentetan berkod Unikod, tetapi sukar untuk memproses rentetan binari dan bukan berkod Unikod. Dan binari ialah format data peringkat terendah komputer, video/audio/program/pakej rangkaian

See all articles