Я собираюсь научить создавать простой веб-сервер в node.js моим ученикам. Я делаю это изначально, используя http-модуль и возвращаю статическую страницу. Серверный код выглядит следующим образом:Отправка вложенного запроса на веб-сервер node.js
var http = require('http');
var fs = require('fs');
http.createServer(function(request, response) {
getFile(response);
}).listen(8080);
function getFile(response) {
var fileName = __dirname + "/public/index.html";
fs.readFile(fileName, function(err, contents) {
if (!err) {
response.end(contents);
} else {
response.end();
console.log("ERROR ERROR ERROR");
}
});
}
index.html выглядит следующим образом:
<!DOCTYPE html>
<html>
<head>
<title>Static Page</title>
</head>
</body>
<h1>Returned static page</h1>
<p>This is the content returned from node as the default file</p>
<img src="./images/portablePhone.png" />
</body>
</html>
Как я ожидал, я получаю дисплей index.html страницы без изображения (потому что я не являюсь обработка мим-типа). Это отлично; что меня смущает, когда я смотрю на сетевой трафик, я ожидаю, что index.html вернется три раза (первоначальный запрос, запрос изображения и один для запроса favicon.ico). Это должно произойти, потому что единственное, что должен вернуть веб-сервер, - это страница index.html в текущей папке. Я зарегистрировал имя __dirname и fileName var, и они вышли правильно по каждому запросу, и действительно было три запроса.
Так что мой вопрос: что мне не хватает? Почему я не вижу три объекта ответа index.html в сетевом мониторе в Chrome? Я знаю, что один из учеников спросит, и я бы хотел, чтобы у него был правильный ответ.
Изображение не работает, потому что ваш веб-сервер не имеет маршрута, определенного для обработки запроса для../images/protablePhone.png'. Помните, что веб-сервер node.js по умолчанию загружает NO файлы. Если вы хотите, чтобы ваш веб-сервер на сервере отображал изображение по запросу браузера, вы должны иметь код, который специально служит для этого изображения. Фактически, ваш веб-сервер обслуживает один и тот же 'index.html' для ВСЕХ запрошенных путей, независимо от того, какой путь был запрошен. Поэтому, когда запрашивается это изображение, вы отправите браузер index.html, который, очевидно, не будет работать для вашего изображения. – jfriend00
Я скопировал ваш код, и я получаю 3 запроса index.html (как и ожидалось). Если вы проверите каждый ответ, вы можете ясно видеть, что все они index.html. Может быть, если вы попытаетесь обновить или отключить фильтр? [screenshot] (http://i.imgur.com/2ptPs71.png) – ippi
Спасибо, я это знаю. Мой вопрос в том, почему объект ответа в запросе изображения не имеет данных (я ошибочно думал о значке тоже, но и он, и локальный (начальный) запрос имеют содержимое индекса в объекте ответа. Так почему бы мне не увидеть, что в объект ответа в Chrome для изображения? Кстати, то, что вы не видите, - это следующие три примера, где мы получаем обработку ошибок, типы mime, протоколирование и т. д. Они доберутся туда. –