Маршрутизация в Express

Последнее обновление: 23.11.2023

При обработке запросов фреймворк Express опирается на систему маршрутизации. В приложении определяются маршруты, а также обработчики этих маршрутов. Если запрос соответствует определенному маршруту, то вызывается для обработки запроса соответствующий обработчик.

Для обработки данных по определенному маршруту можно использовать ряд функций, в частности:

  • use

  • get

  • post

  • put

  • delete

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

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

// обработка запроса по адресу /about
app.get("/about", function(_, response){
	
	response.send("<h1>О сайте</h1>");
});

// обработка запроса по адресу /contact
app.use("/contact", function(_, response){
	
	response.send("<h1>Контакты</h1>");
});

// обработка запроса к корню веб-сайта
app.get("/", function(_, response){
	
	response.send("<h1>Главная страница</h1>");
});
app.listen(3000);

Когда приходит запрос Express сопоставляет запрошенный адрес с каждым из маршрутов. Затем выбирается первый совпавший маршрут. При совпадении маршрута вызывается его функция обработчика.

Символы подстановок

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

К примеру, символ ? указывает, что предыдущий символ может встречаться 1 раз или отсутствовать. И мы можем определить следующую функцию:

app.get("/bo?k", function (request, response) {
	response.send(request.url)
});

Такой маршрут будет соответствовать строке запроса "/bk" или "/bok".

Символ + указывает, что предыдущий символ может встречаться 1 и более раз:

app.get("/bo+k", function (request, response) {
	response.send(request.url)
});

Такой маршрут будет соответствовать запросам "/bok", "/book", "/boook" и так далее.

Символ звездочка * указывает, что на месте данного символа может находиться любое количество символов:

app.get("/bo*k", function (request, response) {
	response.send(request.url)
});

Такой маршрут будет соответствовать запросам "/bork", "/bonk", "/bor.dak", "/bor/ok" и так далее.

Скобки () позволяют оформить группу символов, которые могут встречаться в запросе:

app.get("/book(.html)?", function (request, response) {
	response.send(request.url)
});

Выражение (.html)? указывает, что подстрока ".html" может встречаться или отсутствовать в строке запроса. И такой маршрут будет соответствовать запросам "/book" и "/book.html".

Также вместо определения маршрутов мы можем указывать регулярные выражения. Например, необходимо перехватить запрос ко всем файлам html или всем путям, которые в конце имеют ".html":

app.get(/.*(\.)html$/, function (request, response) {
	response.send(request.url)
});
Помощь сайту
Юмани:
410011174743222
Перевод на карту
Номер карты:
4048415020898850