Menu
CoddyTech

Параметры маршрута

Часть раздела Основы Express путешествия по Node.js на Coddy. Урок 4 из 23.

В коробке с рецептами будет много рецептов, и отдельный маршрут для каждого рецепта никогда не закончился бы.

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

Часть пути, начинающаяся с двоеточия, — это параметр маршрута: он соответствует любому значению, и Express помещает это значение в req.params. Запрос GET /weather/oslo отправляет Forecast for oslo.

Параметр всегда является строкой. Запрос GET /rooms/12 возвращает '12', а '12' === 12 — это false, поэтому преобразуй значение с помощью Number(...), прежде чем сравнивать его с числами.

Если запрошенного объекта не существует, верни статус 404: res.status(404).send('No such city') устанавливает статус, а затем отправляет ответ.

challenge icon

Задание

Легко

У каждого рецепта будет своя страница по пути, содержащему его идентификатор: /recipes/1, /recipes/2 и так далее.

  1. В server.js добавь маршрут для /recipes/:id. Он находит в recipes (из data.js) рецепт, у которого id совпадает с идентификатором в пути. Он отправляет только название этого рецепта в виде текста: /recipes/2 отправляет Pancakes.
  2. Идентификатор из пути — это строка, а идентификаторы в data.js — числа, поэтому преобразуй его перед сравнением.
  3. Если рецепта с таким идентификатором нет, установи статус 404 и отправь текст No such recipe.

Попробуй: Нажми «Запустить» и отправь /recipes/2. Ты должен увидеть Pancakes со статусом 200. Отправь /recipes/4: Fish & Chips. Отправь /recipes/99: No such recipe со статусом 404.

Попробуйте сами

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

const app = express();

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

// type('text') отправляет обычный текст, поэтому каждое название выводится на отдельной строке.
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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Основы Express

Потренируйтесь самостоятельно: Песочница Express