Меню

Обработка HTTP GET и HTTP POST запросов Express

01.07.2018 - Back-end, NodeJS

Handling HTTP GET Request

Теперь давайте имплементируем новый endpoint, чтобы получить один курс с сервера.
Давайте в самом вверху определим массив с курсами. У нас будет 3 объекта с курсами.
Итак, у нас есть два endpointа. Один для получения всех курсов, другой для получения одного курса.

В первом, мы вернем массива с курсами. Во втором случае, нам нужно описать некоторую логику, чтобы найти курс с заданным id. Найдем с помощью метода find. Мы будем сравнивать id из параметров с id из объектов. Однако, значение из req.params.id возвращается как строка. Чтобы все работало как надо при строгом сравнении, нам нужно перевести строку в цифру. В общем результат этого поиска сохраним в константе course. Дальше проверяем, есть ли значение в этой константе. Если значения нет, то по соглашению, мы должны вернуть ответ с HTTP статус кодом 404, что означает, что объект не найден. Это одно из соглашений RESTful APIs. Т.е. мы отсылаем код с помощью res.status(404) и опционально мы можем выслать клиенту сообщение с помощью метода send.

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

const courses = [
    {
        id: 1, name: 'course1'
    },
    {
        id: 2, name: 'course2'
    },
    {
        id: 3, name: 'course3'
    },
]

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

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

app.get('/api/courses/:id', (req, res) => {
    const course = courses.find(course => parseInt(req.params.id, 10) === course.id);
    if (!course) res.status(404).send('The course with the given ID was not found');
    res.send(course);
});

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

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

Посмотрим как отвечать на HTTP POST запросы

Итак, используя HTTP POST запрос, чтобы создать новый курс воспользуемся методом post. Endpoint будет /api/courses/. Множественное число, потому что мы будем работать с коллекцией курсов. Затем мы добавим route handler, он же колбэк. В этом route handler нам нужно прочитать объект курсов. Он должен быть в теле запроса. Используя свойства, что бы создать новый объект курсов, а затем добавить этот объект к массиву курсов. Давайте создадим новый объект с курсом.
Пока что мы не работаем с базой данных. Поэтому id мы проставим руками. Далее свойтва name — нам нужно прочитать его из тела запроса — req.body.name. В теле запроса есть объект, у этого объекта есть свойство name. Для того чтобы req.body.name сработало, мы должны включить парсинг json объектов в теле запроса. Потому что по умолчанию, эта фича отключена в Express.

Итак, в самом верху, где мы импортировали express. Набираем следующую строчку. В двух словах мы добавили кусок middleware (промежуточный слой). Когда мы вызываем express.json(), этот метод возвращает кусок промежуточного слоя, и затем мы исполняем app.use, чтобы использовать этот промежуточный слой в процессе обработки запросов (request processing pipeline). Позже мы рассмотрим это более подробно.

app.use(express.json());

В общем, далее добавляем наш новый курс в массив с курсами.

А затем, по соглашению, когда мы запостили объект на сервер. Когда сервер создает новый объект или новый ресурс, он возвращает этот объект в тело ответа.

app.post('/api/courses/', (req, res) => {
    const course = {
        id: courses.length + 1,
        name: req.body.name
    };
    courses.push(course);
    res.send(course);
});
Метки: , , , , ,

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

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