В этой главе мы рассмотрим создание сервера с помощью фреймворка Express. Казалось бы, зачем нам нужен дополнительный фреймворк, если мы можем воспользоваться готовым модулем http, который есть в Node.js API. Однако Express сам использует модуль http, но вместе с тем предоставляет ряд готовых абстракций, которые упрощают создание сервера и серверной логики, в частности, обработка отправленных форм, работа с куками, CORS и т.д.
Исходный код фреймворка можно посмотреть в репозитории на гитхабе по адресу https://github.com/expressjs/express.
Создадим для проекта новый каталог, который назовем, к примеру, expressapp. Для хранения информации обо всех зависимостях проекта определим в этом каталоге новый файл package.json:
{ "name": "helloapp", "version": "1.0.0", "dependencies": { "express":"^4.18.2" } }
Далее перейдем к этому каталогу в командной строке/терминале и для добавления всех нужных пакетов выполним команду npm install:
c:\app> npm install added 62 packages, and audited 63 packages in 2s 11 packages are looking for funding run `npm fund` for details found 0 vulnerabilities c:\app>
Создадим в каталоге проекта новый файл app.js:
// подключение express const express = require("express"); // создаем объект приложения const app = express(); // определяем обработчик для маршрута "/" app.get("/", function(request, response){ // отправляем ответ response.send("<h2>Привет Express!</h2>"); }); // начинаем прослушивать подключения на 3000 порту app.listen(3000);
Для использования Express в начале надо создать объект, который будет представлять приложение:
const app = express();
Для обработки запросов в Express определено ряд встроенных функций, и одной из таких является функция app.get(). Она обрабатывает GET-запросы протокола HTTP и позволяет связать маршруты с определенными обработчиками. Для этого первым параметром передается маршрут, а вторым - обработчик, который будет вызываться, если запрос к серверу соответствует данному маршруту:
app.get("/", function(request, response){ // отправляем ответ response.send("<h2>Привет Express!</h2>"); });
Маршрут "/" представляет корневой маршрут.
Для запуска сервера вызывается метод app.listen()
, в который передается номер порта.
Запустим проект и обратимся в браузере по адресу http://localhost:3000/:
И что важно, Express опирается на систему маршрутов, поэтому все другие запросы, которые не соответствуют корневому маршруту "/", не будут обрабатываться:
Теперь изменим файл app.js:
const express = require("express"); const app = express(); app.get("/", function(request, response){ response.send("<h1>Главная страница</h1>"); }); app.get("/about", function(request, response){ response.send("<h1>О сайте</h1>"); }); app.get("/contact", function(request, response){ response.send("<h1>Контакты</h1>"); }); app.listen(3000);
Теперь в приложении определено три маршрута, которые будут обрабатываться сервером: