Параметры маршрута
Часть раздела Основы 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') устанавливает статус, а затем отправляет ответ.
Задание
ЛегкоУ каждого рецепта будет своя страница по пути, содержащему его идентификатор: /recipes/1, /recipes/2 и так далее.
- В
server.jsдобавь маршрут для/recipes/:id. Он находит вrecipes(изdata.js) рецепт, у которогоidсовпадает с идентификатором в пути. Он отправляет только название этого рецепта в виде текста:/recipes/2отправляетPancakes. - Идентификатор из пути — это строка, а идентификаторы в
data.js— числа, поэтому преобразуй его перед сравнением. - Если рецепта с таким идентификатором нет, установи статус 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');
});
В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.
Все уроки раздела Основы Express
Потренируйтесь самостоятельно: Песочница Express