Рубрики
Без рубрики

Обслуживание статических файлов с узлом и Express.js

В этой статье мы будем создавать простое приложение для обслуживания статических файлов, таких как HTML-файлы, файлы CSS и изображения, использующие Node.js и Express.

Автор оригинала: Janith Kasun.

Вступление

В этой статье мы собираемся в Build простое приложение для обслуживания статических файлов, таких как HTML-файлы, файлы CSS и изображения, использующие Node.js и Экспресс Отказ

Настройка проекта и установки Express

Чтобы начать, давайте создадим новый проект Node.js, запустив init Команда в новой папке:

$ npm init

Заполните запрошенную информацию в ваши требования или просто установите значения по умолчанию, оставляя каждую строку пустым.

Теперь мы можем установить экспресс-каркас, запустив:

$ npm install --save express

Мы все набор, давайте начнем кодировать!

Служить файлы с Express

Есть два способа обслуживать статические файлы с использованием Express:

  • Обслуживание одного файла, настроив путь к ресурсу
  • Установка публичного каталога, в котором все файлы доступны

Мы перейдем на каждый из этих методов в следующих двух разделах.

Обслуживание одного файла

Рассмотрим сценарий, когда мы хотим создать простую целевую страницу, которая состоит из 3 HTML-документов ( Home.html , contact.html и about.html ), и мы хотим служить Эти файлы пользователю.

Предположим, что пользователь посещает корневой путь ( http://localhost: 3000 ). В этом случае мы хотим служить home.html файл. Точно так же, если пользователь посещает Контакты или Пути, мы хотим служить Contact.html и о.html Файлы соответственно.

Для реализации этого давайте создадим посадка .JS Файл и импортировать Express Library:

const express = require('express');

Затем мы создадим приложение Express:

const app = express();

Затем давайте определим порт, на котором будет запущен наш сервер, который мы будем использовать позже, когда мы фактически запускаем сервер:

const port = 3000;

Поскольку мы отправляем один файл, мы не будем включать ссылки на какие-либо файлы CSS или сценариев в тех файлах HTML, если они не размещаются в другом месте, например, CDN.

Мы будем обрабатывать служение этих файлов вместе в следующем разделе, поэтому на данный момент давайте придерживайтесь трех очень простых, самых популярных HTML-файлов:

home.html:


    

Home

Contact.Html:


    

Contact

about.html:


    

About Us

Теперь давайте вернемся и отредактируем нашу посадка .JS Файл для отправки файлов, соответствующих путям пользователей, такие как отправка home.html файл, когда пользователь посещает корневой путь.

Мы можем использовать res.sendfile () Способ подать файл в ответе:

app.get('/', (req, res) => {
    res.sendFile('./landing-page/home.html', { root: __dirname });
});

По соображениям безопасности лучше всего использовать статический путь для res.sendfile () , как показано выше. Если вы когда-либо принимаете пользовательский ввод, который влияет на путь к файлу, будьте очень осторожны, чтобы пользователю мог быть в состоянии управлять пухом файла и, таким образом, позволяя им получить личные файлы.

В нашем случае мы устанавливаем корню, где относительный путь от передачи корень Параметр к способу. Обратите внимание, что мы прошли __dirname , который является глобальной переменной Node.js на путь текущего запущенного файла.

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

app.get('/about', (req, res) => {
    res.sendFile('./landing-page/about.html', { root: __dirname });
});

app.get('/contact', (req, res) => {
    res.sendFile('./landing-page/contact.html', { root: __dirname });
});

Теперь, когда наше приложение готово к работе, давайте начнем сервер и прослушайте порт, который мы установили ранее:

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

И запустить наше приложение, выполнив:

$ node landing-page.js

Откройте свой браузер и посетите любой из сопоставленных путей, и вам следует встретить с файлами HTML:

Обслуживание статических HTML-файлов с узлом

Настройка публичного каталога

Второй метод обслуживания статических файлов – настроить публичный каталог. В отличие от отправки файла через ответ HTTP, где можно подавать только один файл, все файлы внутри нашей указанной папки будут доступны для пользователей.

Давайте создадим другой файл, называемый server.js и установите папку с нашими тремя HTML-документами, чтобы быть публичным каталогом:

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

// Setting up the public directory
app.use(express.static('landing-page'));

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

Создание публики каталога так же просто, как и использование app.use () и Express.Static () методы.

Давайте снова запустим наше приложение и убедитесь, что это работает:

$ node server.js

Откройте свой браузер и посетите любой из сопопутных путей, и вам следует встретить файлы HTML, как в последний раз. Имейте в виду, что на этот раз корневой путь не сопоставлен на home.html файл, а скорее http://localhost: 3000/home.html :

Обслуживание каталогов с узлом

Кроме того, вы можете установить префикс к пути к доступу вашего публичного каталога, передавая префикс в качестве первого параметра:

app.use('/public', express.static('landing-page'));

Теперь файлы расположены на другом пути. Например, home.html сейчас находится в http://localhost: 3000/public/home.html Отказ

В отличие от первого метода, где вы попадаете и о.html будет подан, обратите внимание, что вы должны использовать полное имя файла, чтобы получить здесь файл – /about.html на примере.

Это позволяет размещать другие файлы, такие как CSS, файлы JavaScript, а также изображения.

Например, если есть изображение кота на вашей общедоступной папке cat.png Сервер будет служить его на http://localhost: 3000/public/cat.png В зависимости от вашей конфигурации, и вы можете легко вызвать его через HTML-страницу и отобразить ее.

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

Заключение

Исходный код этого проекта доступен на Github по-прежнему. Используйте это, чтобы сравнить свой код, если вы когда-нибудь застряли по учебнику.

Счастливое кодирование!