2013-03-05 3 views
12

Это мой первый раз с node.js. Я получаю его для отображения index.html, но он не отображает изображения на сайте или что-то еще, он ТОЛЬКО показывает основной материал html. Вот как я это настроил. На сервере нет apache, php или чего-либо еще, только ubuntu, proftp и node (и завиток и другие зависимости). Я сделал основной каталог для узла файлов/вар/nodeFiles и каталог для файлов HTML/сайта является/вар/nodeFiles/WWW так для моего файла сервера узла Я сделал это так:display html page с node.js

var http = require('http'), 
    fs = require('fs'); 
fs.readFile('/var/nodeFiles/www/index.html', function (err, html) { 
    if (err) { 
     throw err; 
    }  
    http.createServer(function(request, response) { 
     response.writeHeader(200, {"Content-Type": "text/html"}); 
     response.write(html); 
     response.end(); 
    }).listen(80); 
}); 

это работает, но он ТОЛЬКО показывает файл index.html и НИЧЕГО, прикрепленный к нему, поэтому никаких изображений, никаких эффектов или чего-либо, что должен отображаться в html-файле. Файлы и каталоги все правильно, я дважды проверял, и права на папки правильные. Итак, что еще я должен сделать, чтобы получить узел для отображения остальной части сайта? Надеюсь, я правильно объяснил себя, мне сказали, что это место, чтобы задать вопросы развития. Спасибо, что нашли время, чтобы прочитать это.

+0

Всего дубликатов http://stackoverflow.com/questions/6126584/how-to-use-node-js-to-build-pages-that-are-a-mix-between-static-and- dynamic-cont? rq = 1 –

+0

В основном, что вы хотите сделать, это статический контент. Было много вопросов об этом, опубликованном ранее. –

+0

он генерирует html в файле сервера. Я пытался взять существующий сайт и отобразить его с помощью библиотеки fs. Если переписывать его так, я должен это делать, пусть будет так. – user2137087

ответ

20

но это только показывает файл index.html и ничего не прилагается к нему, так что никаких изображений, никаких эффектов или что-нибудь, что должно отображать HTML-файл.

Это потому, что в вашей программе это единственное, что вы возвращаете в браузер независимо от того, как выглядит запрос.

Вы можете посмотреть на более полный пример, который будет возвращать правильные файлы для наиболее распространенных веб-страниц (HTML, JPG, CSS, JS) здесь https://gist.github.com/hectorcorrea/2573391

Кроме того, обратите внимание на этот блог сообщение, которое я написал о том, как начать работу с узлом. Я думаю, это может прояснить вам несколько вещей: http://hectorcorrea.com/blog/introduction-to-node-js

+2

Ваш блог был очень полезным. Переходя от PHP к узлу, есть несколько понятий, которые нужно прояснить. У меня есть несколько человек, которых я только что отправил на ваш блог, у которых было немного времени на преобразование. – user2137087

+0

Я рад, что вам понравилось. –

+0

как я могу использовать это на AWS, если у меня нет статического ip? 'var serverUrl =" 127.0.0.1 ";' и 'var serverUrl =" http://ec2-xx-xx-xx-xx.compute-1.amazonaws.com/ ";' не работает –

5

Проверьте этот базовый код для установки html-сервера. его работа для меня. не

 
var http = require('http'), 
    fs = require('fs'); 


fs.readFile('./index.html', function (err, html) { 
    if (err) { 
     throw err; 
    }  
    http.createServer(function(request, response) { 
     response.writeHeader(200, {"Content-Type": "text/html"}); 
     response.write(html); 
     response.end(); 
    }).listen(8000); 
}); 

+2

это только отображает 'index.html' и никаких других файлов в этом каталоге –

+0

В случае, если я не знаю путь, я знаю только URL-адрес такого типа« www.example.com/example/example1 » – Tripathi29

1

Если ваша цель - просто отобразить некоторые статические файлы, вы можете использовать пакет Connect. У меня был некоторый успех (я все еще довольно новичок в NodeJS), используя его и twitter bootstrap API в сочетании.

в командной строке

:\> cd <path you wish your server to reside> 
:\> npm install connect 

Затем в файле (я назвал) Server.js

var connect = require('connect'), 
    http = require('http'); 
connect() 
    .use(connect.static('<pathyouwishtoserve>')) 
    .use(connect.directory('<pathyouwishtoserve>')) 
    .listen(8080); 

Наконец

:\>node Server.js 

Предостережения:

Если вы не Не хочу показывать режиссера y, исключить строку .use (connect.directory.

Таким образом, я создал папку с именем «server», размещенную index.html в папке и bootstrap API в той же папке. Затем, когда вы получаете доступ к компьютерам IP: 8080, он автоматически использует файл index.html.

Если вы хотите использовать порт 80 (так что просто переходите к http: //, и вам не нужно вводить: 8080 или какой-либо другой порт).вам нужно запустить узел с sudo, я не уверен в последствиях для безопасности, но если вы просто используете его для внутренней сети, я лично не считаю, что это очень важно. Появление внешнего мира - это еще одна история.

Обновление 1/28/2014:

Я не должен был сделать следующее на моих последних версиях вещей, так что попробовать его, как и выше первого, если он не работает (и вы читаете ошибки, жалующиеся, что они не могут найти nodejs), идите, и, возможно, попробуйте ниже.

End Update

Кроме того при работе в убунту я столкнулся с проблемой, используя nodejs в качестве имени (с НПМ), если вы с этой проблемой, я рекомендую использовать псевдоним или что-то «переименовать» nodejs к узлу.

Команды я использовал (лучше или хуже):

Создать новый файл с именем узла

:\>gedit /usr/local/bin/node 
#!/bin/bash 
exec /nodejs "[email protected]" 

sudo chmod -x /usr/local/bin/node 

Это должно сделать

node Server.js 

работы просто отлично

+0

Я получаю сообщение об ошибке в моем браузере, в котором говорится, что Can not GET /. Идеи? –

+0

Также, когда я устанавливаю статику в «../», я получаю сообщение об ошибке, что undefined не является функцией. –

+0

Я подозреваю, что это связано с обновлениями в пакетах, простой пример перестает работать для меня после обновления подключений .... Мне нужно будет кое-что сделать, чтобы узнать, что использует последняя версия (я нашел ее в какой-то момент но не вижу никаких примеров на github прямо сейчас). * Короче говоря, какая версия инструментов вы используете, что приведет к ответу. – onaclov2000

5

Это сделал трюк для меня:

var express = require('express'), 
app = express(); 
app.use('/', express.static(__dirname + '/')); 
app.listen(8080);