Javascript-форум (https://javascript.ru/forum/)
-   Node.JS (https://javascript.ru/forum/node-js-io-js/)
-   -   Nodejs+HTML (потерялись линки на подключенные ресурсы из html) (https://javascript.ru/forum/node-js-io-js/69256-nodejs-html-poteryalis-linki-na-podklyuchennye-resursy-iz-html.html)

lissalmaty 09.06.2017 11:46

Nodejs+HTML (потерялись линки на подключенные ресурсы из html)
 
Здравствуйте всем!!! Помогите новичку!
Начал изучать Node. Пытаюсь запустить index.html отверстанного одностраничника из server.js. Запускается. Только не воспринимаются линки из html (JQuery, CSS и т.д.) Объясние почему и помогите советом пожалуйста)))
З.Ы. И нету ли какого либо иного способа кроме перезаписи тела файла в переменную и ее последующей записи в response? Что нить типа window.open из JS?

'use strict';
var http = require('http');
var fs = require('fs');
var port = process.env.PORT || 1337;

http.createServer(function (request, response) {
fs.readFile('./index.html', { encoding: 'utf8' }, function (error, file) {
if (!error) {
response.writeHead(200, { 'Content-Type': 'text/html' });
response.write(file);
response.end();
}
});
}).listen(port);

SV0L0CH 09.06.2017 12:45

Если отдавать только index.html, то можно все скрипты, стили и картинки включить непосредственно в него (кое-что перевести в base64 или другую подходящую кодировку).
Иначе из request надо будет доставать ссылку на файл из request и по ней загружать и отправлять нужные файлы.
И вообще, есть готовые решения
sudo npm -g install httpserver

lissalmaty 09.06.2017 12:56

Если нетрудно, можно пример?

SV0L0CH 09.06.2017 13:15

Если хочу отдавать файлы из директории, то просто набираю команду
httpserver
и получаю всё что необходимо (естественно это статика)
Это то что мне надо, кроме того можно добавить опций и можно использовать как модуль, то так я его не использовал. Это просто самый простой в использовании сервер на отдачу статики. Собственно поэтому и рекомендую. По поводу продвинутому использованию это в мануалы.

lissalmaty 09.06.2017 13:26

А вот комманда на установку httpserver выше верна?
Просто "npm -g install httpserver" насыпал ошибок и не установился. А что такое "sudo" впереди я так и не понял(((

SV0L0CH 09.06.2017 13:38

sudo - запустить от имени пользователя root
Дело в том что это утилита, которая ставится глобально. Можно зайти как root и ставить глобально без sudo. Если это венда, то sudo вообще не нужно.
Чтобы поставить глобально нужна опция -g , тогда можно запускать как обычную системную команду.

Audaxviator 09.06.2017 14:01

Просто страницу нужно отдавать - как статику. Простой подход - модуль node-static. Посмотрите раздел "AJAX и COMET" в учебнике здесь же - там Коган (спасибо ему очередной раз) как раз всё время юзает простейший сервер, отдающий одну страничку HTML.

Rise 09.06.2017 16:18

Что значит статика люди? Как можно отдать страницу не как статику??

Цитата:

Сообщение от lissalmaty
Только не воспринимаются линки из html (JQuery, CSS и т.д.) Объясние почему

Потому что линки src="jquery.js", href="style.css", src="image.jpg" и тд - это такие же get-запросы как и index.html, нет разницы, значит их надо тоже обрабатывать. Нода не только для использования в качестве http-сервера (как апаче где такая обработка реализована изначально), а есть некий набор встроенных модулей, на основе которых пишутся другие модули на npm, которые могут быть установлены для получения нужного функционала, т.е. Node.js это не тупо сервер, как везде пишут, видимо чтобы не травмировать сразу неокрепшие умы) а как написано на nodejs.org - это JavaScript runtime package ecosystem.

Audaxviator 09.06.2017 17:53

Ну какая новость-то, что "runtime package ecosystem". Я вот щас возьму какой-нибудь nodemailer, напишу пять строчек кода и, запустив (Ctrl-B) этот код прямо в Sublime Text, отправлю себе письмо от имени Стива Джобса. И где же тут будет сервер?
Просто, человек ведь изучает вопрос, и предлагать ему глобально установленный http-server - это же для дебилов. И если он придумал себе задачу простым способом (без типа Экпресса и т.п.) отдать HTML-страницу, то для понимания процесса - самое то начать с node-static.
А что линки и картинки - это такие же гет-запросы, так это логер в консоль даже пишет, трудно не заметить.

Rise 09.06.2017 18:44

Audaxviator, трудно не заметить, но для новичков это не очевидно :)


Часовой пояс GMT +3, время: 19:52.