Знакомство с Express

Самый популярный веб-фреймворк Node, который убирает рутину голого http.

Express — это минималистичный веб-фреймворк для Node, который берёт на себя маршрутизацию, разбор запросов и формирование ответов.

Установка

Express — это npm-пакет, его ставят в проект:

npm install express

После установки он появится в dependencies, и его можно подключать.

Сервер на Express

Сравните с голым http из прошлых уроков — кода заметно меньше и он понятнее:

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

app.get("/", (req, res) => {
  res.send("Главная страница");
});

app.get("/about", (req, res) => {
  res.send("О нас");
});

app.listen(3000, () => {
  console.log("Express слушает порт 3000");
});

Здесь app.get("/about", ...) явно описывает маршрут — никаких лесенок if. А res.send сам проставит нужные заголовки и завершит ответ.

Методы под HTTP-глаголы

У app есть метод под каждый HTTP-глагол:

МетодHTTPНазначение
app.getGETполучить данные
app.postPOSTсоздать ресурс
app.putPUTобновить ресурс
app.deleteDELETEудалить ресурс

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

То, что в голом http требовало регулярок, в Express делается двоеточием. Часть пути после : становится параметром в req.params:

app.get("/users/:id", (req, res) => {
  res.send("Пользователь №" + req.params.id);
});
// GET /users/42  ->  "Пользователь №42"

Express сам выделит 42 и положит в req.params.id. Это и есть та рутина, которую он снимает с вас.

Кроме параметров пути, у запроса часто бывает строка запроса — часть URL после знака ?, например /search?q=node&limit=10. Её Express разбирает в объект req.query: здесь req.query.q будет "node", а req.query.limit"10". Параметры пути (req.params) обычно указывают, какой ресурс нужен, а строка запроса (req.query) — как его отфильтровать или отсортировать.

res.send умеет разное

Метод res.send сам определяет тип ответа: строку отдаст как текст/HTML, объект или массив — как JSON (с правильным заголовком):

res.send("просто текст");          // text/html
res.send({ id: 1, name: "Аня" });  // application/json
res.json({ ok: true });            // явно JSON

Само превращение объекта в JSON-строку — чистый JS, который Express делает за вас:

const response = { id: 42, name: "Пользователь", roles: ["admin", "user"] };

console.log(JSON.stringify(response));
console.log("Тип:", typeof JSON.stringify(response));

Вывод:

{"id":42,"name":"Пользователь","roles":["admin","user"]}
Тип: string

Итог

  • Express — npm-фреймворк, ставится через npm install express.
  • Маршруты описывают методами app.get, app.post, app.put, app.delete.
  • Параметры пути (/users/:id) приходят в req.params.
  • res.send / res.json сами ставят заголовки и завершают ответ.
Проверьте себя
1. Как установить Express?
AОн встроен в Node
Bnpm install express
Cnode add express
Dexpress init
2. Где окажется id из маршрута app.get('/users/:id')?
Areq.query.id
Breq.params.id
Creq.body.id
Dreq.url.id
3. Что сделает res.send, если передать ему объект?
AВыдаст ошибку
BОтправит его как JSON с нужным заголовком
CОтправит [object Object]
DПреобразует в HTML-таблицу
Поддержать проект