Apakah ada perbedaan yang berguna antara app.all('*', ... )
dan app.use('/', ...)
di Node.JS Express?
121
Dalam kebanyakan kasus, mereka akan bekerja dengan cara yang sama. Perbedaan terbesar adalah urutan penerapan middleware:
app.all()
menempel ke router aplikasi, sehingga digunakan setiap kali app.router middleware tercapai (yang menangani semua rute metode ... GET, POST, dll).PEMBERITAHUAN: app.router sudah tidak digunakan lagi di express 4.x.
app.use()
menempel pada tumpukan middleware utama aplikasi, sehingga digunakan dalam urutan yang ditentukan oleh middleware. misalnya, jika Anda mengutamakannya, ini akan menjadi hal pertama yang dijalankan. Jika Anda meletakkannya terakhir, (setelah router), biasanya tidak akan berjalan sama sekali.Biasanya, jika Anda ingin melakukan sesuatu secara global ke semua rute, app.use () adalah opsi yang lebih baik. Selain itu, kemungkinan bug di masa mendatang lebih kecil, karena express 0.4 mungkin akan menjatuhkan router implisit (artinya, posisi router di middleware akan lebih penting daripada sekarang, karena secara teknis Anda bahkan tidak perlu menggunakannya. sekarang juga).
next("route")
denganapp.all
, tapi tidak denganapp.use
.app.use hanya membutuhkan satu fungsi panggilan balik dan itu dimaksudkan untuk Middleware. Middleware biasanya tidak menangani permintaan dan respons, (secara teknis mereka bisa) mereka hanya memproses data masukan, dan menyerahkannya ke penangan berikutnya dalam antrian.
app.all menerima banyak panggilan balik, dan dimaksudkan untuk perutean. dengan beberapa panggilan balik, Anda dapat memfilter permintaan dan mengirim tanggapan. Ini dijelaskan dalam Filter di express.js
app.use hanya melihat apakah url dimulai dengan jalur yang ditentukan
app.all akan mencocokkan jalur lengkap
sumber
app.use:
menggemparkan:
Lihat contoh kode expressJs ini:
Berikut adalah log saat mengakses rute '/ hello':
sumber
Dengan
app.use()
, jalur "mount" dihilangkan dan tidak terlihat oleh fungsi middleware:Fungsi middleware yang terpasang (
express.static
) tidak dipanggil kecuali jikareq.url
berisi awalan ini (/static
), yang pada titik itu akan dilucuti ketika fungsi dipanggil.Dengan
app.all()
, tidak ada perilaku itu.sumber
Ya,
app.all()
dipanggil ketika URI tertentu diminta dengan semua jenis metode permintaan (POST, GET, PUT, atau DELETE)Di sisi lain,
app.use()
digunakan untuk middleware apa pun yang mungkin Anda miliki dan dipasang ke awalan jalur, dan akan dipanggil setiap kali URI di bawah rute itu diminta.Berikut adalah dokumentasi untuk app.all & app.use .
sumber
Dua perbedaan semua jawaban di atas tidak cocok.
Pertama:
app.all
menerima regex sebagai parameter jalurnya.app.use
TIDAK menerima regex.Yang kedua:
app.all(path,handler)
atauapp[method](path,handler)
, pawangpath
harus sama untuk semuapath
. Ini, jalur aplikasi [metode] selesai.app.use(path,hanlder)
, jika jalur penggunaan selesai, jalur hanlder harus '/'. jika jalur penggunaan adalah awal dari jalur lengkap, jalur penangan harus merupakan jalur lengkap lainnya.sumber
Ada dua perbedaan utama:
1. pencocokan pola (jawaban yang diberikan oleh Palani)
2.
next(route)
tidak akan berfungsi di dalam badan fungsi middleware yang dimuat menggunakanapp.use
. Ini dinyatakan dalam tautan dari dokumen:Tautan: http://expressjs.com/en/guide/using-middleware.html
Efek kerja
next('route')
dapat dilihat dari contoh berikut:sumber