Saya agak baru untuk mengekspresikan dan node.js, dan saya tidak tahu perbedaan antara app.use dan app.get. Sepertinya Anda dapat menggunakan keduanya untuk mengirim informasi. Sebagai contoh:
app.use('/',function(req, res,next) {
res.send('Hello');
next();
});
tampaknya sama dengan ini:
app.get('/', function (req,res) {
res.send('Hello');
});
Jawaban:
app.use()
dimaksudkan untuk mengikat middleware ke aplikasi Anda. Inipath
adalah jalur " mount " atau " awalan " dan membatasi middleware hanya berlaku untuk jalur apa pun yang diminta yang dimulai dengan itu. Ia bahkan dapat digunakan untuk menyematkan aplikasi lain:Dengan menetapkan
/
sebagai jalur " mount ",app.use()
akan merespons ke setiap jalur yang dimulai/
, yang semuanya dan terlepas dari kata kerja HTTP yang digunakan:GET /
PUT /foo
POST /foo/bar
app.get()
, di sisi lain, adalah bagian dari perutean aplikasi Express dan dimaksudkan untuk mencocokkan dan menangani rute tertentu ketika diminta denganGET
kata kerja HTTP:GET /
Dan, perutean yang setara untuk contoh Anda
app.use()
sebenarnya adalah:( Pembaruan: Berusaha untuk lebih menunjukkan perbedaan. )
Metode perutean, termasuk
app.get()
, adalah metode praktis yang membantu Anda menyelaraskan respons terhadap permintaan dengan lebih tepat. Mereka juga menambahkan dukungan untuk fitur seperti parameter dannext('route')
.Dalam setiap
app.get()
panggilanapp.use()
, jadi Anda pasti bisa melakukan semua ini denganapp.use()
langsung. Tetapi, melakukan hal itu akan sering membutuhkan (mungkin tidak perlu) menerapkan kembali sejumlah kode boilerplate.Contoh:
Untuk rute sederhana dan statis:
vs.
Dengan beberapa penangan untuk rute yang sama:
vs.
Dengan parameter:
vs.
sumber
path-to-regexp
atau apa pun lagi dan Anda dapat menggunakan parameter rute secara langsung dalam argumen pertamause
metode ini.app.use
adalah metode "tingkat lebih rendah" dari Connect, kerangka kerja middleware tempat Express bergantung.Inilah panduan saya:
app.get
jika Anda ingin mengekspos metode GET.app.use
jika Anda ingin menambahkan beberapa middleware (penangan untuk permintaan HTTP sebelum sampai ke rute yang Anda atur di Express), atau jika Anda ingin membuat rute Anda modular (misalnya, memperlihatkan serangkaian rute dari modul npm yang dapat digunakan aplikasi web lain).sumber
app.use
untuk menangani beberapa rute? Atau kita tidak boleh menggunakanapp.use
untuk routing.Cukup app.use berarti "Jalankan ini di SEMUA permintaan"
app.get berarti "Jalankan ini pada permintaan GET, untuk URL yang diberikan"
sumber
app.get
dipanggil ketika metode HTTP diatur keGET
, sedangkanapp.use
dipanggil terlepas dari metode HTTP, dan oleh karena itu mendefinisikan lapisan yang di atas semua jenis RESTful lain yang paket ekspres memberi Anda akses.sumber
Perbedaan antara
app.use
&app.get
:app.use
→ Ini umumnya digunakan untuk memperkenalkan middlewares di aplikasi Anda dan dapat menangani semua jenis permintaan HTTP.app.get
→ Ini hanya untuk menangani MENDAPATKAN permintaan HTTP.Sekarang, ada kebingungan antara
app.use
&app.all
. Tidak diragukan lagi, ada satu hal yang sama di dalamnya, yaitu keduanya dapat menangani semua jenis permintaan HTTP. Tetapi ada beberapa perbedaan yang merekomendasikan kita untuk menggunakan app.use untuk middlewares dan app.all untuk penanganan rute.app.use()
→ Hanya membutuhkan satu panggilan balik.app.all()
→ Dapat mengambil beberapa panggilan balik.app.use()
hanya akan melihat apakah url dimulai dengan jalur yang ditentukan.Tapi,
app.all()
akan cocok dengan path lengkapnya.Sebagai contoh,
next()
panggilan di dalamapp.use()
akan memanggil middleware berikutnya atau pengendali rute apa pun, tetapinext()
panggilan di dalam hanyaapp.all()
akan memanggil pengendali rute berikutnya (app.all()
,app.get/post/put...
dll.) saja. Jika ada middleware setelahnya, itu akan dilewati. Jadi, disarankan untuk meletakkan semua middlewares selalu di atas penangan rute.sumber
next()
diapp.all('/*', ...)
dalam sebenarnya akan menjalankanapp.use('/', ...)
nanti dalam file. Mungkin saya salah paham dengan Anda di sana. Penjelasan yang sangat membantu sebaliknya.Selain penjelasan di atas, apa yang saya alami:
akan cocok dengan semua permintaan yang dimulai dengan '/ buku' sebagai URL. jadi itu juga cocok dengan '/ book / 1' atau '/ book / 2'
hanya cocok MENDAPATKAN permintaan dengan kecocokan persis . Ini tidak akan menangani URL seperti '/ book / 1' atau '/ book / 2'
Jadi, jika Anda menginginkan penangan global yang menangani semua rute Anda, maka
app.use('/')
adalah pilihannya.app.get('/')
hanya akan menangani URL root.sumber