Menu
CoddyTech

Tham số tuyến đường

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 4 trên 23.

Recipe Box sẽ chứa nhiều công thức nấu ăn, và việc tạo một tuyến đường cho mỗi công thức sẽ không bao giờ kết thúc.

app.get('/weather/:city', (req, res) => {
    res.send('Forecast for ' + req.params.city);
});

Phần đường dẫn bắt đầu bằng dấu hai chấm là tham số tuyến đường (route parameter): nó khớp với mọi giá trị, còn Express đưa giá trị đó vào req.params. GET /weather/oslo gửi Forecast for oslo.

Tham số luôn là chuỗi. GET /rooms/12 cho kết quả '12', còn '12' === 12 là false, vì vậy hãy chuyển đổi bằng Number(...) trước khi so sánh với các số.

Khi thứ được yêu cầu không tồn tại, hãy trả lời với trạng thái 404: res.status(404).send('No such city') đặt trạng thái rồi gửi phản hồi.

challenge icon

Thử thách

Dễ

Mỗi công thức có trang riêng, tại đường dẫn chứa id của công thức đó: /recipes/1, /recipes/2 và cứ thế tiếp tục.

  1. Trong server.js, thêm một route cho /recipes/:id. Route này tìm công thức trong recipes (từ data.js) có id trùng với id trong đường dẫn. Route chỉ gửi tiêu đề của công thức đó dưới dạng văn bản: /recipes/2 gửi Pancakes.
  2. Id trong đường dẫn là chuỗi, còn các id trong data.js là số, vì vậy hãy chuyển đổi id trước khi so sánh.
  3. Khi không có công thức nào có id đó, hãy đặt trạng thái thành 404 và gửi văn bản No such recipe.

Thử nhé: Nhấn Chạy và gửi /recipes/2. Bạn sẽ thấy Pancakes với trạng thái 200. Gửi /recipes/4: Fish & Chips. Gửi /recipes/99: No such recipe với trạng thái 404.

Tự làm thử

import express from 'express';
import { recipes } from './data.js';

const app = express();

app.get('/', (req, res) => {
    res.send('Welcome to Recipe Box');
});

// type('text') gửi văn bản thuần túy, nên mỗi tiêu đề hiển thị trên một dòng riêng.
app.get('/recipes', (req, res) => {
    res.type('text').send(recipes.map((recipe) => recipe.title).join('\n'));
});

app.get('/about', (req, res) => {
    res.send('Recipe Box collects family recipes.');
});

app.listen(3000, () => {
    console.log('Recipe Box is running on port 3000');
});
quiz iconTự kiểm tra

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