Шрифт:
response.end;
}, delay);
}
// Если запрошен адрес "/test/mirror", отправить запрос обратно целиком.
// Удобно, когда необходимо увидеть тело и заголовки запроса,
else if (url.pathname === "/test/mirror") {
// Код состояния и заголовки ответа
response.writeHead(200,{"Content-Type": "text/plain; charset=UTF-8"});
// Вставить в ответ тело запроса
response.write(request.method + " " + request.url +
" HTTP/" + request.httpVersion + "\r\n");
// И заголовки запроса
for(var h in request.headers) {
response.write(h + ": + request.headers[h] + "\r\n");
}
response.write("\r\n");
// За заголовками следует дополнительная пустая строка
// Завершение отправки ответа выполняется следующими функциями-обработчиками:
// Если в chunk передается тело запроса, вставить его в ответ,
request.on("data", function(chunk) {
response.write(chunk); });
// Когда достигнут конец запроса, ответ также завершается,
request.on("end", function(chunk) { response.end; });
}
// Иначе обслужить файл из локального каталога,
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; // Завершить отправку
}