Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

server.js terus bertambah panjang. Pindahkan API resep ke file tersendiri, routes/recipes.js, yang sudah memiliki route untuk mencantumkan semua tag.

  1. Di routes/recipes.js, di bawah route /tags, tambahkan empat route API dari server.js: route untuk daftar, satu resep berdasarkan id, POST untuk menambahkan resep, dan route skala. Di dalam router, hilangkan bagian /api/recipes dari setiap path: /api/recipes/:id menjadi /:id, dan route daftar menjadi /.
  2. Letakkan semuanya di bawah /tags. Express mencoba route secara berurutan, dan /:id yang diletakkan lebih dahulu akan menangkap /tags dan mencari resep dengan id tags.
  3. Hapus empat route tersebut dari server.js.
  4. Di server.js, impor router dari ./routes/recipes.js dan pasang pada /api/recipes dengan app.use, di tempat empat route tadi berada: setelah express.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;
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Dasar-Dasar Express

Latihan sendiri: Playground Express