Rumah > Artikel > hujung hadapan web > Analisis ringkas tentang objek Boleh dibaca dalam modul Strim Node.js_node.js
Saya selalu keberatan untuk bercakap tentang nodej, kerana dari kali pertama saya melihatnya, saya fikir reka bentuknya sangat menjijikkan. Tetapi tidak mungkin, Spesifikasi strim belum lagi dipopularkan, dan memang banyak perkara yang bergantung pada aliran nodejs untuk dilaksanakan, jadi saya hanya boleh menahan hidung dan menggigit peluru dan menariknya keluar. Ini berbau dan keras.
Nodejs dilengkapi dengan modul yang dipanggil aliran Dengan memperkenalkannya, anda boleh mendapatkan satu set pembina objek aliran. Sekarang saya hanya bercakap tentang aliran yang paling mudah. Boleh dibaca.
Malah, hampir semua orang yang telah menggunakan nodejs telah bersentuhan dengan kejadian Boleh Dibaca, tetapi mereka tidak begitu mempedulikannya. Contoh yang sangat tipikal Dalam modul http, kita akan mempunyai objek req dan res apabila memproses setiap permintaan sebenarnya adalah objek Boleh dibaca. Kita boleh membaca bahagian entiti permintaan HTTP dalam bentuk aliran pada req ini.
Jadi persoalannya, mengapa modul http direka secara penstriman di sini? Atau untuk bertanya soalan ini dari dimensi lain ialah "Bagaimana nodejs mendapatkan kandungan permintaan POST?". Pelajar yang tahu cara menggunakan enjin carian pasti dapat mencari jawapan sedemikian dengan mudah: mendengar peristiwa data untuk mengumpul data, dan menggabungkan data yang dikumpul pada acara akhir. Ya, ini adalah penyelesaian kepada masalah ini. Tetapi mengapa ia direka dengan cara ini? Betapa hebatnya jika anda boleh mendapatkan kandungan POST secara langsung seperti PHP? Malah, reka bentuk ini bermanfaat Jika data yang kami terima adalah menyalahi undang-undang, saya dapat mengesannya dengan segera, bertindak balas dan memutuskan sambungan. Ini boleh mengelakkan beberapa kos penghantaran yang tidak perlu. Sebagai contoh, apabila memuat naik gambar, mungkin pengguna tersilap memilih fail boleh laku yang besar Kami tidak perlu menunggu sehingga fail dimuat naik sepenuhnya Kami hanya memerlukan beberapa bait dalam pengepala fail untuk menentukan sama ada fail itu adalah gambar . Menggunakan reka bentuk strim di sini, anda boleh membaca beberapa bait pertama untuk digunakan.
Peristiwa data dan peristiwa akhir yang dinyatakan di atas ialah kedua-dua peristiwa Boleh dibaca Kedua-dua peristiwa ini masing-masing menunjukkan penerimaan data dan penyiapan penerimaan data. Jadi sebenarnya, kita sudah tahu penggunaan Readable, tetapi ramai yang tidak tahu bahawa ia adalah objek Readable.
Tetapi dua acara di atas hanyalah acara untuk pengguna Readable. Bagaimanakah ia menolak sekeping data secara dalaman ke dalam objek Boleh Dibaca supaya Boleh Dibaca boleh mencetuskan peristiwa ini? Kemudian ia adalah kaedah tolak. Berikut ialah contoh yang mencipta objek Boleh dibaca yang menstrimkan nombor yang semakin meningkat (nod-babel digunakan di sini)
import stream from 'stream'; var r = new stream.Readable; r.on('data', data => { console.log(data + ''); }); r.on('end', data => { console.log('end'); }); r._read = () => { // console.log('before read'); }; void function callee(i) { if(i < 10) { r.push(i + ''); // 只能传入字符串或 Buffre 对象 } else { r.push(null); // 当输入一个 null 时表示流传输完成,触发 end 事件 } setTimeout(callee, 500, i + 1); }(0);
Jika anda melihat dengan teliti pada kod di atas, anda akan menemui tempat yang sangat ajaib Kod ini mengatasi kaedah _baca. Malah, saya juga fikir ini adalah satu perangkap saya tidak akan mengadu tentang gaya penamaan peribadi ini. Mengapa saya perlu mengatasi kaedah ini untuk melaksanakannya? Jika kaedah ini tidak ditindih, pengecualian akan dilemparkan apabila memanggil tolak:
Error: not implemented at Readable._read (_stream_readable.js:464:22) at Readable.read (_stream_readable.js:341:10)
Di atas adalah penggunaan asas objek Boleh dibaca. Tetapi terdapat lebih banyak perangkap untuk melangkah. Artikel ini hanyalah pengenalan yang paling mudah untuk membolehkan semua orang belajar cara mencipta objek Boleh dibaca yang boleh mengeluarkan data. Bagi beberapa kaedah asas seperti membaca, ini juga merupakan salah satu reka bentuk yang tidak saintifik.