Отправка статических файлов¶
Вместо того, чтобы определять код, который получает пользователь, напрямую в файле сервера, гораздо удобнее вынести все в отдельный html-файл. Рассмотрим, как мы можем отправлять статические файла, те же файлы html.
Определим новый каталог проекта. Определим в нем основной файл приложения app.js
. Для статических файлов создадим отдельную папку public
, в которую добавим два файла index.html
и about.html
. В итоге проект будет выглядеть следующим образом:
app.js
public
about.html
index.html
В файле index.html
определим какой-нибудь простейший html-код:
<!DOCTYPE html> <html> <head> <title>Главная</title> <meta charset="utf-8" /> </head> <body> <h1>Главная</h1> </body> <html></html> </html>
Аналогично определим код в файле about.html
:
<!DOCTYPE html> <html> <head> <title>О сайте</title> <meta charset="utf-8" /> </head> <body> <h1>О сайте</h1> </body> <html></html> </html>
Наша задача будет заключаться в том, чтобы отправить их содержимое пользователю. Для этого поместим в файл app.js
следующий код:
const http = require('http') const fs = require('fs') http .createServer(function(request, response) { console.log(`Запрошенный адрес: ${request.url}`) if (request.url.startsWith('/public/')) { // получаем путь после слеша const filePath = request.url.substr(1) fs.readFile(filePath, function(error, data) { if (error) { response.statusCode = 404 response.end('Resourse not found!') } else { response.setHeader('Content-Type', 'text/html') response.end(data) } }) } else { // во всех остальных случаях отправляем строку hello world! response.end('Hello World!') } }) .listen(3000)
Если запрошенный адрес начинается с /public/
, то с помощью метода fs.readFile()
считываем нужный файл по пути и отправляем считанные данные клиенту. В остальных случаях отдаем строку Hello World!
.
Запустим приложение и в браузере обратимся по адресу http://localhost:3000
:
Затем обратимся по адресу http://localhost:3000/public/index.html
:
Аналогично мы можем обратиться по адресу http://localhost:3000/public/about.html
: