Отправка файлов¶
Отправка статических файлов - довольно частая задача в построении и функционировании веб-приложеия. Рассмотрим, как отправлять файлы в приложении на Node.js.
Пусть в каталоге поекта у нас будут три файла:
app.jsabout.htmlindex.html
Наряду с файлом приложения app.js определим два html-файла. В файле index.html определим следующий код:
1 2 3 4 5 6 7 8 9 10 11 | |
Аналогично определим код в файле about.html:
1 2 3 4 5 6 7 8 9 10 11 | |
Наша задача будет заключаться в том, чтобы отправить их содержимое пользователю.
Первый способ¶
Для считывания файла может применяться метод fs.createReadStream(), который считывает файл в поток, и затем с помощью метода pipe() мы можем связать считанные файлы с потоком записи, то есть объектом response. Итак, поместим в файл app.js следующий код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | |
Вначале мы получаем запрошенный адрес. Допустим, запрошенный адрес будет соответствовать напрямую пути к файлу на сервере. Затем с помощью асинхронной функции fs.access проверяем доступность файла для чтения. Первый параметр функции - путь к файлу. Второй параметр - опция, относительно которой проверяется доступ. В данном случае значение fs.constants.R_OK говорит о том, что мы проверяем права на чтение из файла. Третий параметр функции - функция обратного вызова, которая получает объект ошибки. Если произошла ошибка (файл не доступен для чтения или вовсе не найден), посылаем статусный код 404.
Для отправки файла применяется цепочка методов
1 | |
Метод fs.createReadStream("some.doc") создает поток для чтения - объект fs.ReadStream. Для получения данных из потока вызывается метод pipe(), в который передается объект интерфейса stream.Writable или поток для записи. А именно таким и является объект http.ServerResponse, который реализует этот интерфейс.
Запустим приложение и в браузере обратимся по адресу http://localhost:3000/index.html:
Аналогично мы можем обратиться по адресу http://localhost:3000/about.html:
В даном случае отправляются файлы html, но подобным образом мы можем отправлять самые разные файлы. Например, определим в проекте папку public. И в ней создадим новый файл styles.css со следующим содержимым:
1 2 3 4 | |
Применим эти стили на странице index.html:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
И затем обратимся к index.html:
Второй способ¶
Второй способ представляет чтение данных с помощью функции fs.readFile() и отправка с помощью метода response.end():
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | |


