losaped
@losaped
Пьяный самурай

Как передать на клиент статические ресурсы?

Есть вот такой код
<link href="css/custom-theme/jquery-ui-1.9.2.custom.css" rel="stylesheet">
		<script src="js/jquery-1.8.3.js"></script>
		<script src="js/jquery-ui-1.9.2.custom.js"></script>
		<script src="js/window.js"></script>


http.createServer(function (request, response) {
	var path = url.parse(request.url).pathname;
	
	switch (path) {

		case '/':
			sendPage(response);
			break;
		default:
			var fileOpt = "utf8";
			if (path.substring(path.length - 3) == "jpg")
				fileOpt = "binary";

			fs.readFile("."+path, fileOpt, function(err, data) {
				if (err) {
					console.log(err);
					response.writeHead("404", {"Content-Type": "text/plain"})
					response.write('File not found!');
				} else {
					console.log(path);
					console.log(fileOpt);
					console.log(getMIME(path));
					response.writeHead("200", getMIME(path));
					response.write(data);
					response.end;
				}
			});
			break;
	}
}).listen(8888);


в лог выдает следующее:
/css/custom-theme/jquery-ui-1.9.2.custom.css
utf8
{ 'Content-Type': 'text/css' }
/js/jquery-1.8.3.js
utf8
{ 'Content-Type': 'application/x-javascript' }
/js/jquery-ui-1.9.2.custom.js
utf8
{ 'Content-Type': 'application/x-javascript' }
/js/window.js
utf8
{ 'Content-Type': 'application/x-javascript' }
/img/2.jpg
binary
{ 'Content-Type': 'image/jpeg' }
/img/3.jpg
binary
{ 'Content-Type': 'image/jpeg' }
/img/4.jpg
binary
{ 'Content-Type': 'image/jpeg' }
/img/5.jpg
binary
{ 'Content-Type': 'image/jpeg' }


html отдается нормально, дальше браузер просит ресурсы: css, js-сскрипты, картинки. И вот тут то самое "НИАЛЁ"!
контенттайпы правильно определяются, сами данные в лог выводил - тоже есть, а браузер ждет данные и не дожидается их в итоге. В чем проблема, как это работает?
  • Вопрос задан
  • 2347 просмотров
Решения вопроса 1
@kazmiruk
Вы не говорите, что завершен ответ. Нужно вызвать response.end(); в конце, а у Вас response.end;
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Staltec
@Staltec
Node.js разработчик
1. Ваше решение по отдаче статического контента - потенциальная дырка в безопасности. Такой подход позволяет читать файлы за пределами document root если указать путь с переходом к вышестоящему каталогу ('../').

2. Используйте serve-static (https://github.com/expressjs/serve-static) как вариант или Express 4.

3. А вообще, статику надо отдавать тем, что с этим наиболее хорошо справляется. Используйте для этого Nginx.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы