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;
Поделиться:
Популярные книги
Газлайтер. Том 4
4. История Телепата
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Я не бог. Книга XXXIV
34. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
На границе империй. Том 9. Часть 2
15. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
Я до сих пор не царь. Книга XXVII
27. Дорогой барон!
Фантастика:
юмористическое фэнтези
аниме
попаданцы
5.00
рейтинг книги
Император Пограничья 1
1. Император Пограничья
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Последнее небо
1. Зверь
Фантастика:
боевая фантастика
6.81
рейтинг книги
Черный Маг Императора 10
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Лишённые плоти
6. Тони Хилл и Кэрол Джордан
Детективы:
маньяки
7.71
рейтинг книги
Вернувшийся: Корпорация. Том III
3. Вернувшийся
Фантастика:
космическая фантастика
боевая фантастика
рпг
5.00
рейтинг книги
Вторая жизнь майора. Цикл
Вторая жизнь майора
Фантастика:
героическая фантастика
боевая фантастика
попаданцы
5.00
рейтинг книги
Князь Андер Арес 2
2. Андер Арес
Фантастика:
рпг
аниме
фэнтези
фантастика: прочее
5.00
рейтинг книги
Лев Толстой
363. Жизнь замечательных людей
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Воин-Врач
1. Воин-Врач
Фантастика:
попаданцы
альтернативная история
историческое фэнтези
6.00
рейтинг книги
Наследник
1. Рюрикова кровь
Фантастика:
научная фантастика
попаданцы
альтернативная история
8.69
рейтинг книги