JavaScript. Подробное руководство, 6-е издание, стр. 167
<b> }</b><b> // Иначе обслужить файл из локального каталога,</b><b> else {</b><b> // Получить имя локального файла и определить тип его содержимого по расширению,</b><b> var filename = url.pathname.substring(1); // удалить начальный /</b><b> var type;</b><b> switch(filename.substring(filename.lastlndexOf(".")+1)) { // расшир.</b><b> case "html":</b><b> case "htm": type = "text/html; charset=UTF-8"; break;</b><b> case "js": type = "application/JavaScript;charset=UTF-8"; break;</b><b> case "css": type = "text/css; charset=UTF-8"; break;</b><b> case "txt": type = "text/plain; charset=UTF-8"; break;</b><b> case "manifest": type = "text/cache-manifest; charset=UTF-8"; break;</b><b> default: type = "application/octet-stream"; break;</b><b> }</b><b> // Прочитать файл в асинхронном режиме и передать его содержимое единым блоком</b><b> // в функцию обратного вызова. Для очень больших файлов лучше было бы</b><b> // использовать API потоков ввода/вывода с функцией</b><b> fs.createReadStream().</b><b>fs.readFile(filename, function(err, content) {</b><b> if (err) { // Если no каким-то причинам невозможно прочитать файл</b><b> response.writeHead(404, { // Отправить 404 Not Found</b><b> "Content-Type": "text/plain; charset=UTF-8"});</b><b> response.write(err.message); // Тело сообщения об ошибке</b><b> response.end(); // Завершить отправку</b><b> }</b><b> else { // Иначе, если файл успешно прочитан.</b><b> response.writeHead(200, // Установить код состояния и тип MIME </b><b> {"Content-Type": type});</b><b> response.write(content); // Отправить содержимое файла</b><b> response.end(); // И завершить отправку</b><b> }</b><b> }):</b><b> }</b><b>});</b>12.2.2. Пример использования Node: модуль утилит клиента HTTP
В примере 12.3 определяется несколько вспомогательных клиентских функций, использующих модуль «http», позволяющих выполнять GET- и POST-запросы протокола HTTP. Пример оформлен как модуль «httputils», который можно использовать в собственных программах, например:
<b>var httputils = require("./httputils"); // Отметьте отсутствие расш. ".js" </b><b>httputils.get(иrl. function(status. headers, body) { console.log(body); });</b>При выполнении программного кода модуля функция
<b>require()</b><b>eval().</b>Пример 12.3. Модуль «httputils» для интерпретатора Node
<b>//</b><b>// Модуль "httputils" для интерпретатора Node.</b><b>//</b><b>// Выполняет асинхронный HTTP GET-запрос для указанного URL и передает </b><b>// код состояния HTTP, заголовки и тело ответа указанной функции обратного </b><b>// вызова. Обратите внимание, как этот метод экспортируется через объект exports. </b><b>exports.get = function(url, callback) {</b><b> // Разобрать URL и получить необходимые фрагменты</b><b> url = require('url‘).parse(url);</b><b> var hostname = url.hostname, port = url.port || 80;</b><b> var path = url.pathname, query = url.query;</b><b> if (query) path += "?” + query;</b><b> // Выполняем простой GET-запрос</b><b> var client = require("http").createClient(port, hostname);</b><b> var request = client.request("GET”, path, {</b><b> "Host": hostname // Заголовки запроса</b><b> });</b><b> request.end();</b><b> // Функция обработки ответа после начала его получения </b><b> request.on("response", function(response) {</b>