Рассмотрим, как в Node.js + Express отправлять пользователю статические файлы html. Для работы со статическими файлами в Express определен специальный компонент express.static(), который указывает на каталог с файлами.
Итак, пусть у нас проект будет выглядеть следующим образом:
app.js: главный файл приложения
node_modules
package.json
public: папка где будет определен один файл
about.html
В папке public будет располагаться файл about.html со следующим содержимым:
<!DOCTYPE html> <html> <head> <title>О сайте</title> <meta charset="utf-8" /> </head> <body> <h1>О сайте</h1> </body> <html>
Теперь определим в файле app.js следующий код:
const express = require("express"); const app = express(); app.use(express.static("public")); app.use("/", function(_, response){ response.send("<h1>Главная страница</h1>"); }); app.listen(3000);
Чтобы встроить компонент express.static в процесс обработки запроса, вызывается функция app.use()
. Эта функция позволяет добавлять различные
компоненты, которые еще называются middleware, в конвейер обработки запроса:
app.use(express.static("public"));
Причем данный вызов помещается до всех остальных вызовов функции app.get()
.
В саму же функцию express.static()
передается путь к папке со статическими файлами. В данном случае мы указываем относительный путь - к папке "public"
внутри текущей папки проекта. При необходимости также можно задать абсолютный путь:
app.use(express.static(__dirname + "/public"));
Здесь специальное выражение __dirname позволяет получить полный путь к папке, к которому далее добавляется путь "/public".
Запустим приложение на выполнение и обратимся в браузере по пути "http://localhost:3000/about.html":
Следует отметить, что для обращения к файлу мы указываем только имя файла без названия каталога public. Также не следует путать подобное обращение к файлам с действием функции sendFile: в данном случае мы напрямую обращаемся к статическим файлам, а функция sendFile фактически берет содержимое из файла и отсылает его пользователю.
Дополнительно мы можем изменить путь к каталогу статических файлов:
const express = require("express"); const app = express(); app.use("/static", express.static("public")); app.use("/", function(_, response){ response.send("<h1>Главная страница</h1>"); }); app.listen(3000);
Теперь чтобы обратиться к файлу about.html, необходимо отправить запрос http://localhost:3000/static/about.html.
В заключение стоит отметить, что таким образом мы можем определить различные пути к статическим файлам. Например, у нас файлы html располагаются в однйо папке, стили - в другой, а клиентские скрипты javascript - в третьей:
app.use(express.static("html")); app.use(express.static("styles")); app.use(express.static("scripts"));