Просмотр полной версии : Nodejs+HTML (потерялись линки на подключенные ресурсы из html)
lissalmaty
09.06.2017, 11:46
Здравствуйте всем!!! Помогите новичку!
Начал изучать 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);
Если отдавать только index.html, то можно все скрипты, стили и картинки включить непосредственно в него (кое-что перевести в base64 или другую подходящую кодировку).
Иначе из request надо будет доставать ссылку на файл из request и по ней загружать и отправлять нужные файлы.
И вообще, есть готовые решения
sudo npm -g install httpserver
lissalmaty
09.06.2017, 12:56
Если нетрудно, можно пример?
Если хочу отдавать файлы из директории, то просто набираю команду
httpserver
и получаю всё что необходимо (естественно это статика)
Это то что мне надо, кроме того можно добавить опций и можно использовать как модуль, то так я его не использовал. Это просто самый простой в использовании сервер на отдачу статики. Собственно поэтому и рекомендую. По поводу продвинутому использованию это в мануалы.
lissalmaty
09.06.2017, 13:26
А вот комманда на установку httpserver выше верна?
Просто "npm -g install httpserver" насыпал ошибок и не установился. А что такое "sudo" впереди я так и не понял(((
sudo - запустить от имени пользователя root
Дело в том что это утилита, которая ставится глобально. Можно зайти как root и ставить глобально без sudo. Если это венда, то sudo вообще не нужно.
Чтобы поставить глобально нужна опция -g , тогда можно запускать как обычную системную команду.
Audaxviator
09.06.2017, 14:01
Просто страницу нужно отдавать - как статику. Простой подход - модуль node-static. Посмотрите раздел "AJAX и COMET" в учебнике здесь же - там Коган (спасибо ему очередной раз) как раз всё время юзает простейший сервер, отдающий одну страничку HTML.
Audaxviator
09.06.2017, 17:53
Ну какая новость-то, что "runtime package ecosystem". Я вот щас возьму какой-нибудь nodemailer, напишу пять строчек кода и, запустив (Ctrl-B) этот код прямо в Sublime Text, отправлю себе письмо от имени Стива Джобса. И где же тут будет сервер?
Просто, человек ведь изучает вопрос, и предлагать ему глобально установленный http-server - это же для дебилов. И если он придумал себе задачу простым способом (без типа Экпресса и т.п.) отдать HTML-страницу, то для понимания процесса - самое то начать с node-static.
А что линки и картинки - это такие же гет-запросы, так это логер в консоль даже пишет, трудно не заметить.
Чтобы отдавать статику node js вообще сама по себе избыточна гораздо проще использовать nginx например.
vBulletin® v3.6.7, Copyright ©2000-2025, Jelsoft Enterprises Ltd. Перевод: zCarot