Чтение онлайн

на главную - закладки

Жанры

JavaScript. Подробное руководство, 6-е издание
Шрифт:

else {

// Получить имя локального файла и определить тип его содержимого по расширению,

var filename = url.pathname.substring(1); // удалить начальный /

var type;

switch(filename.substring(filename.lastlndexOf(".")+1)) { // расшир.

case "html":

case "htm": type = "text/html; charset=UTF-8"; break;

case "js": type = "application/JavaScript;charset=UTF-8"; break;

case "css": type = "text/css; charset=UTF-8"; break;

case "txt": type = "text/plain; charset=UTF-8"; break;

case "manifest": type = "text/cache-manifest; charset=UTF-8"; break;

default: type = "application/octet-stream"; break;

}

// Прочитать файл в асинхронном режиме и передать его содержимое единым блоком

// в функцию обратного вызова. Для очень больших файлов лучше было бы

// использовать API потоков ввода/вывода с функцией

fs.createReadStream.
fs.readFile(filename, function(err, content) {

if (err) { // Если no каким-то причинам невозможно прочитать файл

response.writeHead(404, { // Отправить 404 Not Found

"Content-Type": "text/plain; charset=UTF-8"});

response.write(err.message); // Тело сообщения об ошибке

response.end; // Завершить отправку

}

else { // Иначе, если файл успешно прочитан.

response.writeHead(200, // Установить код состояния и тип MIME

{"Content-Type": type});

response.write(content); // Отправить содержимое файла

response.end; // И завершить отправку

}

}):

}

});

12.2.2. Пример использования Node: модуль утилит клиента HTTP

В примере 12.3 определяется несколько вспомогательных клиентских функций, использующих модуль «http», позволяющих выполнять GET- и POST-запросы протокола HTTP. Пример оформлен как модуль «httputils», который можно использовать в собственных программах, например:

var httputils = require("./httputils"); // Отметьте отсутствие расш. ".js"

httputils.get(иrl. function(status. headers, body) { console.log(body); });

При выполнении программного кода модуля функция

require
не использует обычную функцию
eval.
Модули выполняются в специальном окружении, чтобы они не могли определять глобальные переменные или как-то иначе изменять глобальное пространство имен. Это специализированное окружение для выполнения модулей всегда включает глобальный объект с именем exports. Модули экспортируют свои API, определяя свойства этого объекта. [27]

27

Интерпретатор Node реализует протокол CommonJS работы с модулями, описание которого можно найти по адресу http://www.commonjs.org/specs/modules/LO/.

Пример 12.3. Модуль «httputils» для интерпретатора Node

//

// Модуль "httputils" для интерпретатора Node.

//

// Выполняет асинхронный HTTP GET-запрос для указанного URL и передает

// код состояния HTTP, заголовки и тело ответа указанной функции обратного

// вызова. Обратите внимание, как этот метод экспортируется через объект exports.

exports.get = function(url, callback) {

// Разобрать URL и получить необходимые фрагменты

url = require('url‘).parse(url);

var hostname = url.hostname, port = url.port || 80;

var path = url.pathname, query = url.query;

if (query) path += "?” + query;

// Выполняем простой GET-запрос

var client = require("http").createClient(port, hostname);

var request = client.request("GET”, path, {

"Host": hostname // Заголовки запроса

});

request.end;

Поделиться:
Популярные книги

Туполев

Бодрихин Николай Георгиевич
1327. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Туполев

Идеальный мир для Лекаря

Сапфир Олег
1. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря

Камень. Книга пятая

Минин Станислав
5. Камень
Фантастика:
боевая фантастика
6.43
рейтинг книги
Камень. Книга пятая

Личный аптекарь императора. Том 5

Карелин Сергей Витальевич
5. Личный аптекарь императора
Фантастика:
городское фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
7.50
рейтинг книги
Личный аптекарь императора. Том 5

Двойник короля 18

Скабер Артемий
18. Двойник Короля
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Двойник короля 18

Локки 10. Потомок бога

Решетов Евгений Валерьевич
10. Локки
Фантастика:
фэнтези
юмористическое фэнтези
героическая фантастика
боевая фантастика
5.00
рейтинг книги
Локки 10. Потомок бога

Последний Паладин. Том 7

Саваровский Роман
7. Путь Паладина
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Последний Паладин. Том 7

Господин из завтра. Тетралогия.

Махров Алексей
Фантастика:
альтернативная история
8.32
рейтинг книги
Господин из завтра. Тетралогия.

Газлайтер. Том 16

Володин Григорий Григорьевич
16. История Телепата
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Газлайтер. Том 16

Кодекс Охотника. Книга XXI

Винокуров Юрий
21. Кодекс Охотника
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Охотника. Книга XXI

Обрыв

Гончаров Иван Александрович
Проза:
классическая проза
русская классическая проза
8.93
рейтинг книги
Обрыв

An ordinary sex life

Астердис
Любовные романы:
современные любовные романы
love action
5.00
рейтинг книги
An ordinary sex life

Я граф. Книга XII

Дрейк Сириус
12. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я граф. Книга XII

Кодекс Крови. Книга Х

Борзых М.
10. РОС: Кодекс Крови
Фантастика:
фэнтези
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга Х