Express Router
Thuộc phần Kiến thức cơ bản về Express trong hành trình Node.js của Coddy. Bài học 19 trên 23.
Giờ đây, server.js chứa các trang, các tuyến API và middleware, đồng thời tệp này ngày càng dài hơn.
// 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() tạo một ứng dụng nhỏ có các tuyến riêng, được đặt trong tệp riêng. app.use('/api/books', booksRouter) gắn router này vào ứng dụng: tuyến / của router xử lý GET /api/books, còn tuyến /:isbn xử lý GET /api/books/9780141439518. Tiền tố chỉ cần viết một lần trong app.use. Lỗi phát sinh bên trong router vẫn được chuyển đến trình xử lý lỗi của ứng dụng.
Tệp mới routes/recipes.js đã có sẵn một tuyến, /tags.
Thử thách
Dễserver.js ngày càng dài. Hãy chuyển API công thức sang tệp riêng routes/recipes.js, nơi đã có tuyến liệt kê mọi thẻ.
- Trong
routes/recipes.js, bên dưới tuyến/tags, hãy thêm bốn tuyến API từserver.js: tuyến liệt kê, tuyến lấy một công thức theo id, tuyến POST thêm công thức và tuyến điều chỉnh khẩu phần. Bên trong bộ định tuyến, hãy bỏ phần/api/recipeskhỏi mỗi đường dẫn:/api/recipes/:idtrở thành/:id, còn tuyến liệt kê trở thành/. - Giữ các tuyến này bên dưới
/tags. Express xử lý các tuyến theo thứ tự, và nếu đặt/:idlên trước, tuyến đó sẽ khớp với/tagsvà tìm công thức có id làtags. - Xóa bốn tuyến đó khỏi
server.js. - Trong
server.js, hãy import bộ định tuyến từ./routes/recipes.jsvà gắn nó tại/api/recipesbằngapp.use, ở vị trí của bốn tuyến trước đây: sauexpress.json()và trước trình xử lý lỗi 404.
Thử ngay: Nhấn Chạy và gửi /api/recipes/tags. Bạn sẽ thấy ["breakfast","dinner","soup","sweet","vegan"]. Gửi /api/recipes/2: công thức Pancakes như trước. Gửi POST {"title": "Toast"} đến /api/recipes: trạng thái 201. Sau đó gửi /api/recipes/5/scale?by=2: trạng thái 500 và {"error":"Something went wrong"}, nghĩa là lỗi phát sinh bên trong bộ định tuyến vẫn đến được trình xử lý lỗi của bạn. URL không thay đổi, chỉ vị trí của code thay đổi.
Tự làm thử
import express from 'express';
import { recipes } from '../data.js';
const router = express.Router();
// Mỗi thẻ xuất hiện một lần, theo thứ tự bảng chữ cái.
router.get('/tags', (req, res) => {
const tags = new Set(recipes.flatMap((recipe) => recipe.tags));
res.json([...tags].sort());
});
// Chuyển các tuyến /api/recipes từ server.js sang đây, bên dưới /tags.
// Trong router, các đường dẫn được tính tương đối so với vị trí gắn router.
export default router;
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong Kiến thức cơ bản về Express
Tự luyện tập: Playground Express