Hampir setiap aplikasi Express yang saya lihat memiliki app.use
pernyataan untuk middleware tetapi saya belum menemukan penjelasan yang jelas dan ringkas tentang apa sebenarnya middleware dan apa yang dilakukan app.use
pernyataan itu. Bahkan dokumen ekspres sendiri agak kabur dalam hal ini. Bisakah Anda menjelaskan konsep-konsep ini untuk saya?
228
Jawaban:
middleware
Saya setengah jalan memisahkan konsep middleware dalam proyek baru.
Middleware memungkinkan Anda untuk menentukan setumpuk tindakan yang harus Anda lalui. Express server sendiri adalah setumpuk middlewares.
Kemudian Anda bisa menambahkan lapisan ke tumpukan middleware dengan memanggil
.use
Lapisan dalam tumpukan middleware adalah fungsi, yang mengambil n parameter (2 untuk express,
req
&res
) dan sebuahnext
fungsi.Middleware mengharapkan layer untuk melakukan beberapa perhitungan, menambah parameter dan kemudian memanggil
next
.Tumpukan tidak melakukan apa pun kecuali Anda menanganinya. Express akan menangani tumpukan setiap kali permintaan HTTP masuk ditangkap di server. Dengan middleware Anda menangani tumpukan secara manual.
Contoh yang lebih lengkap:
Dalam istilah ekspres, Anda cukup menentukan setumpuk operasi yang ingin Anda ekspresikan untuk setiap permintaan HTTP yang masuk.
Dalam hal mengekspresikan (daripada menghubungkan), Anda memiliki middleware global dan rute middleware khusus. Ini berarti Anda dapat melampirkan tumpukan middleware ke setiap permintaan HTTP yang masuk atau hanya melampirkannya ke permintaan HTTP yang berinteraksi dengan rute tertentu.
Contoh lanjutan dari ekspres & middleware:
sumber
app.use()
sintaksisnya. Apa nilai pengembalian sebenarnya dari middleware dan apause
hubungannya dengan itu?Setelah menyederhanakan berbagai hal, server web dapat dilihat sebagai fungsi yang menerima permintaan dan menampilkan respons. Jadi jika Anda melihat server web sebagai suatu fungsi, Anda dapat mengaturnya menjadi beberapa bagian dan memisahkannya menjadi fungsi-fungsi yang lebih kecil sehingga komposisi mereka menjadi fungsi asli.
Middlewares adalah fungsi yang lebih kecil yang dapat Anda buat dengan orang lain dan manfaat yang jelas adalah bahwa Anda dapat menggunakannya kembali.
sumber
Saya menambahkan jawaban terlambat untuk menambahkan sesuatu yang tidak disebutkan dalam jawaban sebelumnya.
Sekarang sudah jelas bahwa middleware berfungsi antara permintaan klien dan jawaban server . Fungsionalitas middleware paling umum yang diperlukan adalah mengelola kesalahan, interaksi basis data, mendapatkan info dari file statis atau sumber daya lainnya. Untuk pindah ke tumpukan middleware panggilan balik berikutnya harus dipanggil, Anda bisa melihatnya di akhir fungsi middleware untuk pindah ke langkah berikutnya dalam aliran.
Anda dapat menggunakan
app.use
pendekatan dan memiliki alur seperti ini :tetapi Anda juga dapat menggunakan pendekatan lain dan meneruskan setiap middleware sebagai argumen fungsi. Berikut adalah contoh dari situs web MooTools Nodejs di mana perangkat makan tengah mendapatkan aliran Twitter, Github, dan Blog sebelum
response
dikirim kembali ke klien. Perhatikan bagaimana fungsi dilewatkan sebagai argumen diapp.get('/', githubEvents, twitter, getLatestBlog, function(req, res){
. Menggunakanapp.get
hanya akan dipanggil untuk permintaan GET,app.use
akan dipanggil untuk semua permintaan.sumber
.get()
metode ini mengambil 3 jenis argumen: yang pertama, yang terakhir dan yang di tengah. Secara internal mendeteksi jika ada lebih banyak argumen dari 2 dan menggunakan mereka (yang tengah) sebagai fungsi middleware, memanggil mereka dari kiri ke kanan.panduan expressjs memiliki jawaban yang cukup rapi untuk pertanyaan Anda, saya sangat menyarankan Anda untuk membacanya, saya memposting potongan pendek panduan ini, panduan ini cukup baik.
Menulis middleware untuk digunakan dalam aplikasi Express
Gambaran
Fungsi Middleware adalah fungsi yang memiliki akses ke objek permintaan ( req ), objek respons ( res ), dan fungsi berikutnya dalam siklus permintaan-respons aplikasi. Fungsi selanjutnya adalah fungsi di router Express yang, ketika dipanggil, mengeksekusi middleware menggantikan middleware saat ini.
Fungsi Middleware dapat melakukan tugas-tugas berikut:
Jika fungsi middleware saat ini tidak mengakhiri siklus permintaan-respons, ia harus memanggil next () untuk memberikan kontrol ke fungsi middleware berikutnya. Jika tidak, permintaan akan dibiarkan menggantung.
Contoh
Berikut adalah contoh aplikasi Express "Hello World" sederhana. Sisa dari artikel ini akan mendefinisikan dan menambahkan dua fungsi middleware ke aplikasi: satu disebut myLogger yang mencetak pesan log sederhana dan satu lagi yang disebut requestTime 1 yang menampilkan timestamp dari permintaan HTTP.
Fungsi Middleware myLogger
Berikut adalah contoh sederhana dari fungsi middleware yang disebut "myLogger". Fungsi ini hanya mencetak "LOGGED" ketika permintaan ke aplikasi melewatinya. Fungsi middleware ditugaskan ke variabel bernama myLogger.
Untuk memuat fungsi middleware, panggil app.use () , tentukan fungsi middleware. Sebagai contoh, kode berikut memuat fungsi middleware myLogger sebelum rute ke jalur root (/).
Setiap kali aplikasi menerima permintaan, itu mencetak pesan "LOGGED" ke terminal.
Urutan pemuatan middleware penting: fungsi middleware yang dimuat pertama juga dijalankan terlebih dahulu.
Jika myLogger dimuat setelah rute ke jalur root, permintaan tidak pernah mencapainya dan aplikasi tidak mencetak "LOGGED", karena pengendali rute jalur root mengakhiri siklus permintaan-respons.
Fungsi middleware myLogger cukup mencetak pesan, kemudian meneruskan permintaan ke fungsi middleware berikutnya di stack dengan memanggil fungsi next () .
sumber
===== Penjelasan sangat sangat sederhana =====
Middlewares sering digunakan dalam konteks kerangka Express.js dan merupakan konsep dasar untuk node.js. Singkatnya, pada dasarnya fungsi yang memiliki akses ke objek permintaan dan respons aplikasi Anda. Cara saya ingin memikirkannya, adalah serangkaian 'pemeriksaan / pra-layar' yang diminta melalui permintaan sebelum ditangani oleh aplikasi. Misalnya, Middlewares akan sangat cocok untuk menentukan apakah permintaan tersebut diautentikasi sebelum melanjutkan ke aplikasi dan mengembalikan halaman login jika permintaan tersebut tidak diautentikasi atau untuk mencatat setiap permintaan. Banyak middlewares pihak ketiga yang tersedia yang memungkinkan beragam fungsionalitas.
Contoh Middleware sederhana:
Kode di atas akan dieksekusi untuk setiap permintaan yang masuk dan akan mencatat url permintaan, metode next () pada dasarnya memungkinkan program untuk melanjutkan. Jika fungsi next () tidak dipanggil, program tidak akan melanjutkan lebih jauh dan akan berhenti pada pelaksanaan middleware.
Beberapa Middleware Gotchas:
sumber
next()
tetapireturn next()
. Apa bedanya?next()
karena kami ingin middleware berikutnya dipanggil, saya tidak berpikirnext()
ataureturn next()
, harus membuat perbedaan! Masih tergantung pada apa kodenya ...Middlewares adalah fungsi yang dieksekusi di tengah setelah input / sumber kemudian menghasilkan output yang bisa menjadi output akhir atau dapat digunakan oleh middleware berikutnya sampai siklus selesai.
Ini seperti sebuah produk yang melewati jalur perakitan di mana ia akan dimodifikasi ketika bergerak sepanjang sampai selesai, dievaluasi atau ditolak.
Middleware mengharapkan beberapa nilai untuk bekerja (yaitu nilai parameter) dan berdasarkan beberapa logika middleware akan memanggil atau tidak memanggil middleware berikutnya atau mengirim respons kembali ke klien.
Jika Anda masih tidak dapat memahami konsep middleware, itu dengan cara yang mirip dengan dekorator atau pola rantai komando.
sumber
Middleware adalah subset dari fungsi berantai yang dipanggil oleh lapisan perutean Express js sebelum penangan yang ditentukan pengguna dipanggil. Fungsi-fungsi Middleware memiliki akses penuh ke objek permintaan dan respons dan dapat memodifikasi salah satunya.
Rantai middleware selalu disebut dalam urutan yang tepat di mana ia telah didefinisikan, sehingga sangat penting bagi Anda untuk mengetahui dengan tepat apa yang dilakukan sepotong middleware tertentu.
Setelah fungsi middleware selesai, ia memanggil fungsi berikutnya dalam rantai dengan memanggil argumen berikutnya sebagai fungsi.
Setelah rantai lengkap dijalankan, penangan permintaan pengguna dipanggil.
sumber
Buat semuanya tetap sederhana, bung!
Catatan: jawabannya terkait dengan kasus middlware bawaan ExpressJS, namun ada beberapa definisi dan kasus penggunaan middlware.
Dari sudut pandang saya, middleware bertindak sebagai fungsi utilitas atau pembantu tetapi aktivasi dan penggunaannya sepenuhnya opsional dengan menggunakan kode
app.use('path', /* define or use builtin middleware */)
yang tidak ingin dari kami untuk menulis beberapa kode untuk melakukan tugas yang sangat umum yang diperlukan untuk setiap permintaan HTTP klien kami seperti memproses cookie, token CSRF dan ..., yang sangat umum di sebagian besar aplikasi sehingga middleware dapat membantu kami melakukan semua ini untuk setiap permintaan HTTP klien kami dalam beberapa tumpukan, urutan, atau urutan operasi, kemudian berikan hasil proses sebagai satu unit permintaan klien .Contoh:
Menerima permintaan klien dan memberikan tanggapan balik kepada mereka sesuai dengan permintaan mereka adalah sifat dari teknologi server web.
Bayangkan jika kita memberikan respons hanya dengan "Halo, dunia!" teks untuk permintaan GET HTTP ke root URI server web kami adalah skenario yang sangat sederhana dan tidak memerlukan yang lain, tetapi sebaliknya jika kami memeriksa pengguna yang saat ini masuk dan kemudian merespons dengan "Halo, Nama Pengguna!" membutuhkan sesuatu yang lebih dari biasanya dalam hal ini kami membutuhkan middleware untuk memproses semua metadata permintaan klien dan memberikan kami informasi identifikasi yang diambil dari permintaan klien kemudian menurut info itu kami dapat secara unik mengidentifikasi pengguna kami saat ini dan dimungkinkan untuk menanggapinya / dia dengan beberapa data terkait.
Semoga bisa membantu seseorang!
sumber
Dalam istilah yang sangat mendasar jika saya ingin menjelaskannya seperti ini saya belajar ini dari traversymedia youtube channel express crash course.
ok jadi middle ware adalah fungsi yang dijalankan setelah Anda melakukan panggilan ke rute Anda seperti ini.
Fungsi logger ini dijalankan setiap kali Anda me-refresh halaman Anda yang berarti Anda dapat menulis apa pun di dalamnya yang harus Anda lakukan setelah halaman Anda diberikan operasi panggilan api apa pun, atur ulang semuanya pada dasarnya apa saja. dan letakkan middleware ini sebelum urutan fungsi rute Anda dari middleware benar-benar penting atau tidak berfungsi
sumber