Saya mulai dengan NodeJS dan Express 4, dan saya agak bingung. Saya telah membaca situs web Express, tetapi tidak bisa melihat kapan harus menggunakan pengendali rute atau kapan harus menggunakan express.Router
.
Seperti yang dapat saya lihat, jika saya ingin menampilkan halaman atau sesuatu ketika pengguna mengklik /show
misalnya saya harus menggunakan:
var express = require('express')
var app = express()
app.get("/show", someFunction)
Pada awalnya, saya pikir ini sudah tua (untuk Express 3). Apakah itu benar atau ini juga cara untuk Express 4?
Jika ini cara untuk melakukannya di Express 4, untuk apa express.Router
?
Saya membaca contoh yang hampir sama seperti di atas tetapi menggunakan express.Router
:
var express = require('express');
var router = express.Router();
router.get("/show", someFunction)
Jadi, apa perbedaan antara kedua contoh tersebut?
Yang mana yang harus saya gunakan jika saya hanya ingin melakukan situs web pengujian sederhana?
Router
tidak.listen()
untuk permintaan sendiri. Ini berguna untuk memisahkan aplikasi Anda menjadi beberapa modul - membuatRouter
setiap modulapp
dapatrequire()
dan.use()
sebagai middleware.app.get(..)
sintaksnya hanyalah jalan pintas untuk membuat bekerja denganexpress.router
lebih nyaman. Jika Anda baru memulai, jangan khawatir tentang spesifikasi router.app's
metode perutean sendiri, sepertiapp.get()
, cukup untuk kebutuhan Anda, gunakan saja. TheRouter
hanya ada untuk kenyamanan untuk membantu Anda mengatur aplikasi di beberapa modul. Dari panduan : " Theexpress.Router
class dapat digunakan untuk membuat modular penangan rute mountable A.Router
Misalnya adalah middleware yang lengkap dan sistem routing yang, karena alasan ini sering disebut sebagai 'mini-app'. "Jawaban:
app.js
dogs.js
Saat
var app = express()
dipanggil, objek aplikasi dikembalikan. Anggap ini sebagai aplikasi utama .Ketika
var router = express.Router()
dipanggil, aplikasi mini yang sedikit berbeda dikembalikan. Gagasan di balik aplikasi mini adalah bahwa setiap rute di aplikasi Anda bisa menjadi sangat rumit, dan Anda akan mendapat manfaat dari memindahkan semua kode itu ke file terpisah. Setiap router file menjadi aplikasi mini , yang memiliki struktur yang sangat mirip dengan aplikasi utama .Pada contoh di atas, kode untuk rute / dogs telah dipindahkan ke file sendiri sehingga tidak mengacaukan aplikasi utama . Kode untuk / kucing dan / burung akan disusun dengan cara yang sama dalam file mereka sendiri. Dengan memisahkan kode ini menjadi tiga aplikasi mini , Anda dapat mengerjakan logika untuk masing-masing secara terpisah, dan tidak khawatir tentang bagaimana hal itu akan memengaruhi dua lainnya.
Jika Anda memiliki kode (middleware) yang berkaitan dengan ketiga rute, Anda dapat meletakkannya di aplikasi utama , sebelum
app.use(...)
panggilan. Jika Anda memiliki kode (middleware) yang hanya berkaitan dengan salah satu rute itu, Anda dapat memasukkannya ke file untuk rute itu saja.sumber
app.use('/dogs', dogs)(app)
karena Anda menentukan rute di sana, juga (dan perbaiki saya jika saya salah) jika Anda melakukannya dengan cara ini objek aplikasi memiliki semua perangkat tengah yang sebelumnya ditempatkan di atasnya dan tambahan barang tengah akan ditambahkan ke objek aplikasi (dengan asumsi lebih banyak barang tengah dalam rute anjing). jika Anda menggunakannyaroute.get('/dogs', route)
hanya meneruskan perangkat tengah ke objek aplikasi saat berinteraksi dengan rute yang ditentukan dalam router itu dan jika cakupan aplikasi berada di luar rute, perangkat itu tidak memiliki akses ke perangkat tengah itu.app.use('/dogs', show)
. Dengan cara ini, rute tidak tergantung pada aplikasi, dan dapat digunakan kembali dalam aplikasi Express apa pun. Middleware ditempatkan di mana saja sebelum rute digunakan oleh rute itu. Jika Anda menempatkan middleware di atas semua rute di app.js, maka semua rute akan menggunakan middleware itu. Jika Anda menempatkan middleware di dalam file rute (dogs.js), hanya rute itu yang akan menggunakannya. Jika Anda menempatkan middleware setelah rute GET di dalam dogs.js, maka hanya rute POST yang akan menggunakannya (selama itu berakhir dengan respons).app.get('/dogs'dogs,)(app)
karena pertanyaannya adalah tentang fitur get app.get dan route.get. Anda menunjukkan cara memisahkan rute agar dapat dikelola. Tapi bukankah anakdot saya benar jika kita berbicara tentangapp.get
? Jika saya dapat menggunakan PC saya akan mengedit komentar saya di atas.Router
tidak.listen()
untuk permintaan sendiri". Itu mungkin perbedaan utama.Express 4.0 hadir dengan Router baru. Sebagaimana disebutkan di situs:
Ada artikel bagus di https://scotch.io/tutorials/learn-to-use-the-new-router-in-expressjs-4 yang menjelaskan perbedaan dan apa yang dapat dilakukan dengan router.
Untuk meringkas
Dengan router Anda dapat memodulasi kode Anda dengan lebih mudah. Anda dapat menggunakan router sebagai:
catatan:
The
app.router
objek, yang telah dihapus di Express bintang 4, telah membuat cerdas in ekspres 5. Pada versi baru, itu adalah hanya referensi ke dasar Ekspres router, tidak seperti di Ekspres 3, di mana sebuah aplikasi harus secara eksplisit memuat itu.sumber
Seperti pada contoh di atas, kita dapat menambahkan metode permintaan HTTP berbeda di bawah rute.
sumber
Katakanlah aplikasi Anda sedikit rumit. Jadi apa yang kita lakukan pertama adalah kita membagi aplikasi menjadi beberapa modul sehingga perubahan dalam satu modul tidak mengacaukan yang lain dan Anda dapat terus bekerja pada modul individu, tetapi pada akhirnya Anda perlu mengintegrasikan semuanya menjadi satu karena Anda sedang membangun satu aplikasi. Sepertinya kita memiliki satu aplikasi utama dan beberapa aplikasi anak yang orang tuanya adalah aplikasi utama. Jadi ketika kita membuat aplikasi induk, kita membuatnya menggunakan
Dan untuk aplikasi induk ini kita perlu memasukkan aplikasi anak. Tetapi karena aplikasi anak bukanlah aplikasi yang sama sekali berbeda (karena mereka berjalan dalam konteks konteks-java yang sama), express menyediakan cara untuk melakukannya dengan cara pada fungsi Router Expresse dan ini adalah apa yang kita lakukan di setiap file modul anak dan mari kita memanggil satu modul anak seperti aboutme .
Dengan module.exports kita membuat modul ini tersedia untuk dikonsumsi orang lain dan karena kita telah memodulasi hal-hal yang kita butuhkan untuk membuat file modul tersedia untuk aplikasi induk melalui fungsi simpul yang membutuhkan fungsi seperti modul pihak ketiga lainnya dan file induk terlihat sesuatu seperti ini.
setelah kita membuat modul anak ini tersedia untuk orang tua kita perlu memberi tahu aplikasi orang tua kapan harus menggunakan aplikasi anak ini. Katakanlah ketika pengguna menyentuh jalan tentang saya, kita membutuhkan aplikasi anak tentang saya untuk menangani permintaan dan kami melakukannya dengan menggunakan metode penggunaan Expresse .
dan dalam satu kesempatan file induk terlihat seperti ini
Di atas semua yang dapat dilakukan orang tua adalah dapat memulai server di mana sebagai anak tidak bisa. Semoga ini bisa menjelaskan. Untuk informasi lebih lanjut, Anda selalu dapat melihat kode sumber yang membutuhkan waktu tetapi memberi Anda banyak informasi. Terima kasih.
sumber
parent.use('/aboutme', child)
?menggunakan app.js untuk menulis rute berarti mereka dapat diakses oleh semua pengguna karena app.js dimuat saat aplikasi dimulai. Namun, menempatkan rute dalam aplikasi mini express.router () melindungi dan membatasi aksesibilitasnya.
sumber
express.Router
memiliki banyak pilihan:/show
rute tidak sama dengan/Show
, perilaku ini dinonaktifkan secara default/show/
rute ke tidak sama dengan/show
, perilaku ini juga dinonaktifkan secara defaultsumber
Singkatnya,
express.Router
dapat melakukan lebih banyak hal ketika dibandingkan denganapp.get()
, seperti middleware, apalagi, Anda dapat mendefinisikan satu lagi objek router denganexpress.Router()
sumber