Меню

Route параметры в express

01.07.2018 - Back-end, NodeJS

Route parameters (Параметры роутов)

Сейчас у нас есть роут для получения списка курсов.

const express = require('express');
const app = express();

app.get('/', (req, res) => {
    res.send("Hello, world!");
});

app.get('/api/courses', (req, res) => {
    res.send(JSON.stringify([1,2,3]));
});

const port = process.env.PORT || 3000;

app.listen(port, () => console.log(`We listen ${port}`));

Посмотрим, как создать роут, чтобы получить единственный курс.
Ранее мы уже рассматривали RESTful сервисы. Мы выяснили, чтобы получить один курс, мы должны вложить id курса в url. Т.е. вид url должен быть примерно следующим /api/courses/1

Будем предполагать, что 1 это id курса.
Посмотрим, как мы можем имплементировать такой роут. И здесь нам в url нужно определить параметр с помощью записи вида :id. id — это название параметра здесь. Оно может быть любым, хоть shitId, хоть fuckId. Теперь мы добавим route handler функцию. Настала очередь считать этот параметр id с помощью свойства params объекта request.

Пока что давайте отправим параметр на клиентскую машину.

app.get('/api/courses/:id', (req, res) => {
    res.send(req.params.id);
});

Также есть возможность передать несколько параметров в роуте. Представьте, что вы готовите сервис для поддержки блога. И наш путь будет выглядеть так: /api/posts/:year/:month. И он будет передавать все посты заданного года и месяца. Мы можем посмотреть, что содержим объект params, когда мы передаем ему параметры. Например если в последнем примере мы введем url — api/posts/2018/1, и выведем req.params, то получим следующий объект.

app.get('/api/posts/:year/:month', (req, res) => {
    res.send(req.params);
});

//Response
{
    year: "2018",
    month: "1"
}

В express мы также можем получить queryString параметр. Это параметры, которые передаются после знака ?.

Например мы хотим получить все посты за январь 2018 года и отсортировать их по имени. Для этого введем следующий url: /api/posts/2018/1?sortBy=name. Мы используем queryString параметры, для получения дополнительной информации на бэкэнд сервисах.

Т.е. мы используем параметры роутов, чтобы получить существенные запрашиваемые данные, а queryString параметры, для всего, что опционально. Давайте посмотрим, как считывать query параметры. Вместо req.params мы воспользуемся req.query.

app.get('/api/posts/:year/:month', (req, res) => {
    res.send(req.query);
});

//url /api/posts/2018/1?sortBy=name
//Response
{
    sortBy: "name"
}

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *