Черновой перевод описания модуля node-static

node-static

простой гибкий модуль чтения-записи файлов для Node

Node-static понимает и поддерживает условные GET и HEAD-запросы. Node-static был вдохновлен некоторыми другими модулями для работы со статическими файлами, такими как node-paperboy и antinode.

Краткий обзор

var static = require('node-static');
//Создание node-static сервера, обслуживающего папку ./public
var file = new static.Server('./public');
 
require('http').createServer(function (request, response) {
    request.addListener('end', function () {
        // Работа с файлами
        file.serve(request, response);
    }).resume();
}).listen(8080);

API

Создание node-static сервера

Создание экземпляра сервера происходит очень просто:
new static.Server();

Он будет работать с файлами в текущей директории. Если вы хотите работать с файлами в какой-нибудь другой директории, укажите путь к ней первым аргументом:
new static.Server('./public');
Вы можете также указать, как долго клиент может хранить полученные данные в кэше:
new static.Server('./public', { cache: 3600 });
Эта строка установит заголовок ответа Cache-Control, указывающий клиенту, что срок кэширования файла составляет один час. Это настройки по умолчанию.

Работа с файлами в директории

Чтобы работать с файлами в директории, просто вызовите метод serve экземпляра сервера и передайте ему объекты запроса и ответа сервера.

var static = require('node-static');
var fileServer = new static.Server('./public');
require('http').createServer(function (request, response) {
    request.addListener('end', function () {
        fileServer.serve(request, response);
    }).resume();
}).listen(8080);

Работа с конкретными файлами

Если вам необходимо работать с конкретными файлами, например, со страницей ошибки, используйте метод serveFile.
fileServer.serveFile('/error.html', 500, {}, request, response);
Эта строка вернет файл error.html из корневой директории со статусом 500. Например, вы можете возвращать страницу ошибки, если первоначальный запрос не был найден:

require('http').createServer(function (request, response) {
    request.addListener('end', function () {
        fileServer.serve(request, response, function (e, res) {
            if (e && (e.status === 404)) { // If the file wasn't found 
                fileServer.serveFile('/not-found.html', 404, {}, request, response);
            }
        });
    }).resume();
}).listen(8080);

Более подробно о перехвате ошибки ниже.

Перехват ошибок и прослушивание событий

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

var static = require('node-static'); 
var fileServer = new static.Server('./public');
require('http').createServer(function (request, response) {
    request.addListener('end', function () {
        fileServer.serve(request, response, function (err, result) {
            if (err) { // There was an error serving the file 
                console.error("Error serving " + request.url + " - " + err.message);
 
                // Respond to the client 
                response.writeHead(err.status, err.headers);
                response.end();
            }
        });
    }).resume();
}).listen(8080);

Обратите внимание, что если вы передаете функцию обратного вызова и происходит ошибка при передаче файла, Node-static не ответит клиенту. Это дает возможность изменить маршрут запроса или обработать его по-другому.
Например, вы можете захотеть интерпретировать запрос как статический, но если файл не найден, отравить его в приложение.
Если вы хотите слушать события ошибок, вы можете использовать обработчики событий:

fileServer.serve(request, response).addListener('error', function (err) {
    console.error("Error serving " + request.url + " - " + err.message);
});

С этим методом вам не придется отправлять ответ, если произойдет ошибка.

Параметры при создании сервера

cache
Устанавливает заголовок Cache-Control.
Пример: { cache: 7200 }
Длительность кэша составит указанное количество секунд. Передача false отключит заголовок Cache-Control.
По умолчанию длительность кэширования составляет 3600 сек.
serverInfo
Устанавливает заголовок Server.
Пример: { serverInfo: "myserver" }
По умолчанию: node-static{version}
headers
Устанавливает заголовки ответа.
Пример: { 'X-Hello': 'World!' }
По умолчанию: {}
gzip
Включает поддержку отправления сжатых ответов. Позволяет проверять с текущей папке наличие файлов с указанным имененм и расширение '.gz'. Если сжатый файл найден и клиент указал поддержку передачи сжатых файлов, то содержимое файла .gz будет отправлено вместо содержимого несжатого файла с заголовком Content-Encoding: gzip.
Пример: { gzip: true }
Пример: { gzip: /^\/text/ }
Передача true устанавливает проверку для всех файлов. Передача регулярного выражения — только для файлов, соответствующих этому выражению.
По умолчанию: false
indexFile
Устанавливает произвольный индексный файл.
Пример: { indexFile: "index.htm" }
По умолчанию: index.html

Интерфейс командной строки

node-static поддерживает CLI.

Установка

$ npm install -g node-static

Примеры использования

# работа в текущей директории
$ static
serving "." at http://127.0.0.1:8080
 
# работа в другой директории
$ static public
serving "public" at http://127.0.0.1:8080
 
# указание дополнительных заголовков (полезно при разработке) 
$ static -H '{"Cache-Control": "no-cache, must-revalidate"}'
serving "." at http://127.0.0.1:8080
 
# установка максимального времени кэширования 
$ static -c 7200
serving "." at http://127.0.0.1:8080
 
# использование сервера в локальной сети
$ static -a 0.0.0.0
serving "." at http://0.0.0.0:8080
 
# помощь
$ static -h

0 комментариев

Оставить комментарий

*Доступные HTML-теги: a, abbr, blockquote, code, pre, del, i, em, strong, b, strike
*Не будет опубликован