Express Router
Termasuk bagian Dasar-Dasar Express dalam perjalanan Node.js di Coddy. Pelajaran 19 dari 23.
server.js kini memuat halaman, rute API, dan middleware, dan isinya terus bertambah.
// routes/books.js
const router = express.Router();
router.get('/', (req, res) => res.json(books));
router.get('/:isbn', (req, res) => res.json(findBook(req.params.isbn)));
export default router;
// server.js
app.use('/api/books', booksRouter);express.Router() membuat aplikasi kecil dengan rutenya sendiri, yang disimpan dalam filenya sendiri. app.use('/api/books', booksRouter) memasangnya: router tersebut menjawab GET /api/books dengan /, dan menjawab GET /api/books/9780141439518 dengan /:isbn. Awalan ditulis sekali, di app.use. Error yang dilempar di dalam router tetap diteruskan ke penangan error aplikasi.
File baru routes/recipes.js sudah memiliki satu rute, /tags.
Tantangan
Mudahserver.js terus bertambah panjang. Pindahkan API resep ke file tersendiri, routes/recipes.js, yang sudah memiliki route untuk mencantumkan semua tag.
- Di
routes/recipes.js, di bawah route/tags, tambahkan empat route API dariserver.js: route untuk daftar, satu resep berdasarkan id, POST untuk menambahkan resep, dan route skala. Di dalam router, hilangkan bagian/api/recipesdari setiap path:/api/recipes/:idmenjadi/:id, dan route daftar menjadi/. - Letakkan semuanya di bawah
/tags. Express mencoba route secara berurutan, dan/:idyang diletakkan lebih dahulu akan menangkap/tagsdan mencari resep dengan idtags. - Hapus empat route tersebut dari
server.js. - Di
server.js, impor router dari./routes/recipes.jsdan pasang pada/api/recipesdenganapp.use, di tempat empat route tadi berada: setelahexpress.json()dan sebelum handler 404.
Coba: Tekan tombol “Jalankan” dan kirim /api/recipes/tags. Kamu seharusnya melihat ["breakfast","dinner","soup","sweet","vegan"]. Kirim /api/recipes/2: resep Pancakes, seperti sebelumnya. Kirim POST {"title": "Toast"} ke /api/recipes: status 201. Lalu kirim /api/recipes/5/scale?by=2: status 500 dan {"error":"Something went wrong"}, jadi error yang dilempar dari dalam router tetap sampai ke handler error-mu. URL-nya tidak berubah, hanya lokasi kodenya yang berubah.
Coba sendiri
import express from 'express';
import { recipes } from '../data.js';
const router = express.Router();
// Setiap tag satu kali, dalam urutan alfabet.
router.get('/tags', (req, res) => {
const tags = new Set(recipes.flatMap((recipe) => recipe.tags));
res.json([...tags].sort());
});
// Pindahkan rute /api/recipes dari server.js ke sini, di bawah /tags.
// Di dalam router, path bersifat relatif terhadap lokasi router dipasang.
export default router;
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Dasar-Dasar Express
Latihan sendiri: Playground Express