Использование node.js в качестве простого веб-сервера

Я хочу запустить очень простой HTTP-сервер. Каждый GET-запрос к example.com должен получать index.html, но как обычную HTML-страницу (т.е. так же, как при чтении обычных веб-страниц).

Используя приведенный ниже код, я могу прочитать содержимое index.html. Как передать index.html как обычную веб-страницу?

var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');

http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end(index);
}).listen(9615);

Одно из предложений ниже является сложным и требует написания строки get для каждого ресурсного файла (CSS, JavaScript, изображения), который я хочу использовать.

Как я могу обслужить одну HTML-страницу с некоторыми изображениями, CSS и JavaScript?

Комментарии к вопросу (7)

Вы можете использовать подключение и ServeStatic с Node.js для этого:

  1. Установить подключить и обслуживать статические с НПМ

$ НПМ установить подключить обслуживать-статический

  1. Создать server.js файл с таким содержанием:

ВАР подключения = требуют('подключения'); ВАР serveStatic = требуют('служить-статическое'); подключиться().использовать(serveStatic(__каталог)).слушать(8080, функция(){ консоль.журнал('сервер работает на 8080...'); });

  1. Работать с Node.js

узел $ server.js

Теперь вы можете перейти к http://localhost:8080/yourfile.html

Комментарии (13)

Простой Node.js сервер-это просто:

$ npm install http-server -g

Сейчас вы можете запустить сервер с помощью следующей команды:

$ cd MyApp

$ http-server

Если вы're через НПМ 5.2.0 или новее, вы можете использовать HTTP-сервер без установки с справку по NPX`. Это'т рекомендован для использования в производстве, но является отличным способом, чтобы быстро сделать сервер работает на localhost.

$ npx http-server

Или, вы можете попробовать это, которые открывает браузер и позволяет CORS-запросов:

$ http-server -o --cors

Дополнительные параметры, проверьте документация для HTTP-сервер` на GitHub, или выполнить:

$ http-server --help

Много других приятных особенностей и мозг мертв-простое развертывание для NodeJitsu.

Характеристика Вилки

Конечно, вы можете легко пополнять собственными вилкой. Вы можете найти его's уже сделано в одной из существующих 800+ вилы этого проекта:

Свет Сервере: Авто Освежающая Альтернатива

Хорошая альтернатива с HTTP-сервера[свет-сервера`](https://www.npmjs.com/package/light-server). Он поддерживает файл просмотр и автоматическое обновление и многие другие возможности.

$ npm install -g light-server 
$ light-server

Добавить в контекстное меню папки в Проводнике Windows

 reg.exe add HKCR\Directory\shell\LightServer\command /ve /t REG_EXPAND_SZ /f /d "\"C:\nodejs\light-server.cmd\" \"-o\" \"-s\" \"%V\""

Простой сервер в формате JSON остальные

Если вам нужно создать простой сервер остальное для проекта прототипе JSON с сервера может быть то, что вы'вновь ищу.

Автоматический Освежающий Редакторы

Большинство веб-страниц редакторы и инструменты IDE теперь включает веб-сервер, который будет смотреть ваши исходные файлы и автоматическое обновление вашей веб-страницы, когда они меняются.

Я использую сервер с помощью Visual Studio кода.

В открытые исходники текстовый редактор скобки также включает в себя NodeJS статический веб-сервер. Достаточно открыть любой html-файл в скобках, нажмите на "просмотр в реальном времени" и он начинает статический сервер и открывает браузер на странице. Браузер *автоматическое обновление при редактировании и сохранении файла HTML. Это особенно полезно для тестирования адаптивных веб-сайтов. Откройте HTML-страницу в разных браузерах/размеров окон/приборы. Сохранить HTML страницу и сразу увидеть, если ваш адаптивный вещи работают, как они все* автоматическое обновление.

Разработчики Приложения PhoneGap

Если вы'повторного кодирования гибридного мобильного приложения, Вы можете быть заинтересованы, чтобы знать, что он команда вышла на автоматическое обновление концепции на доске с их новыми PhoneGap Приложение. Это универсальное мобильное приложение, которое может загружать файлы в HTML5 с сервера во время разработки. Это очень ловкий трюк, поскольку теперь вы можете пропустить медленной компиляции/развернуть в цикл разработки гибридных мобильных приложений, Если вы'ре изменения в JS и CSS/HTML-файлов — это то, что вы'снова делаешь большую часть времени. Они также обеспечивают статические веб-NodeJS сервер (запустить помощью PhoneGap служить), который обнаруживает изменения в файлах.

Помощью PhoneGap + Сенча Touch Разработчики

Я'вэ сейчас широко адаптирован статический сервер &амп помощью PhoneGap; PhoneGap приложение разработчика для Сенча Touch & jQuery мобильных разработчиков. Проверить его на Сенча Touch живые. Поддерживает --в QR QR-коды и ... localtunnel, что прокси сервером статического с компьютера на URL-адрес за пределами брандмауэра! Тонн использует. Массивное ускорение для гибридных мобильных разработчиков.

Кордова + Основы Разработчики Ионные

Локальный сервер с функцией автоматического обновления выпекаются в инструмент ионные. Просто запустите ионные служить из папки приложения. Еще лучше ... ионные служить --лаборатории для просмотра автоматическое обновление бок о бок видом на платформах iOS и Android.

Комментарии (7)

Проверить это суть. Я'м воспроизводя его здесь для справки, но суть регулярно обновляется.

Node.JS статический файл веб-сервера. Положите его в свой путь, чтобы запустить сервера в любом каталоге, имеет необязательный аргумент-порт.

var http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs"),
    port = process.argv[2] || 8888;

http.createServer(function(request, response) {

  var uri = url.parse(request.url).pathname
    , filename = path.join(process.cwd(), uri);

  fs.exists(filename, function(exists) {
    if(!exists) {
      response.writeHead(404, {"Content-Type": "text/plain"});
      response.write("404 Not Found\n");
      response.end();
      return;
    }

    if (fs.statSync(filename).isDirectory()) filename += '/index.html';

    fs.readFile(filename, "binary", function(err, file) {
      if(err) {        
        response.writeHead(500, {"Content-Type": "text/plain"});
        response.write(err + "\n");
        response.end();
        return;
      }

      response.writeHead(200);
      response.write(file, "binary");
      response.end();
    });
  });
}).listen(parseInt(port, 10));

console.log("Static file server running at\n  => http://localhost:" + port + "/\nCTRL + C to shutdown");

Обновление

Суть работает с CSS и js файлов. Я'вэ использовал его сам. Используя прочитанный/напишите в "бинарных и" режим, это'т проблема. Это просто означает, что файл не'т интерпретируется как текст-файл библиотеки и не имеет отношения к контент-тип, возвращаемый в ответ.

Проблема с ваш код вы'вновь всегда возвращая контент-типа "в текст/равнина и". Приведенный выше код не возвращает какой-либо контент-тип, но если вы're просто использовать его для HTML, CSS и JS, браузер может определить те просто прекрасно. Нет содержания-типа лучше, чем неправильный.

Как правило, контент-тип конфигурации веб-сервера. Поэтому я'м извините, если это не'т решить проблему your, но он работал для меня, как простого сервера разработки и думал, что это может помочь некоторым другим людям. Если вам нужен грамотный контент-типов в ответ, вы должны явно определить их как joeytwiddle или использовать библиотеку как подключить, что имеет разумные значения по умолчанию. Хорошая вещь об этом является то, что она's простое и самодостаточное (без зависимостей).

Но я чувствую, ваш вопрос. Так вот-это комбинированное решение.

var http = require("http"),
    url = require("url"),
    path = require("path"),
    fs = require("fs")
    port = process.argv[2] || 8888;

http.createServer(function(request, response) {

  var uri = url.parse(request.url).pathname
    , filename = path.join(process.cwd(), uri);

  var contentTypesByExtension = {
    '.html': "text/html",
    '.css':  "text/css",
    '.js':   "text/javascript"
  };

  fs.exists(filename, function(exists) {
    if(!exists) {
      response.writeHead(404, {"Content-Type": "text/plain"});
      response.write("404 Not Found\n");
      response.end();
      return;
    }

    if (fs.statSync(filename).isDirectory()) filename += '/index.html';

    fs.readFile(filename, "binary", function(err, file) {
      if(err) {        
        response.writeHead(500, {"Content-Type": "text/plain"});
        response.write(err + "\n");
        response.end();
        return;
      }

      var headers = {};
      var contentType = contentTypesByExtension[path.extname(filename)];
      if (contentType) headers["Content-Type"] = contentType;
      response.writeHead(200, headers);
      response.write(file, "binary");
      response.end();
    });
  });
}).listen(parseInt(port, 10));

console.log("Static file server running at\n  => http://localhost:" + port + "/\nCTRL + C to shutdown");
Комментарии (8)

Вы Don'т необходимость экспресс. Вы Don'т нужно подключить. Node.js делает протокол HTTP изначально. Все, что вам нужно сделать, это вернуть файл зависит от запроса:

var http = require('http')
var url = require('url')
var fs = require('fs')

http.createServer(function (request, response) {
    var requestUrl = url.parse(request.url)    
    response.writeHead(200)
    fs.createReadStream(requestUrl.pathname).pipe(response)  // do NOT use fs's sync methods ANYWHERE on production (e.g readFileSync) 
}).listen(9615)    

Более полный пример, что гарантирует запросы могут'т открыть файлы под базу-каталог и не правильную обработку ошибок:

var http = require('http')
var url = require('url')
var fs = require('fs')
var path = require('path')
var baseDirectory = __dirname   // or whatever base directory you want

var port = 9615

http.createServer(function (request, response) {
    try {
        var requestUrl = url.parse(request.url)

        // need to use path.normalize so people can't access directories underneath baseDirectory
        var fsPath = baseDirectory+path.normalize(requestUrl.pathname)

        var fileStream = fs.createReadStream(fsPath)
        fileStream.pipe(response)
        fileStream.on('open', function() {
             response.writeHead(200)
        })
        fileStream.on('error',function(e) {
             response.writeHead(404)     // assume the file doesn't exist
             response.end()
        })
   } catch(e) {
        response.writeHead(500)
        response.end()     // end the response so browsers don't hang
        console.log(e.stack)
   }
}).listen(port)

console.log("listening on port "+port)
Комментарии (18)

Я думаю, что часть, которую вы сейчас упускаете, это то, что вы посылаете:

Content-Type: text/plain

Если вы хотите, чтобы веб-браузер отобразил HTML, вы должны изменить это на:

Content-Type: text/html
Комментарии (3)

Шаг 1 (в командной строке [я надеюсь, что вы CD в папке]) : НПМ установить экспресс

Шаг 2: Создание server.js файл

var fs = require("fs");
var host = "127.0.0.1";
var port = 1337;
var express = require("express");

var app = express();
app.use(express.static(__dirname + "/public")); //use static files in ROOT/public folder

app.get("/", function(request, response){ //root dir
    response.send("Hello!!");
});

app.listen(port, host);

Обратите внимание, что вы должны добавить слишком WATCHFILE (или использовать nodemon). Выше код-это только для простого соединения с сервером.

Шаг 3: server.js узел " или " server.js nodemon

Сейчас существует более простой способ, если вы просто хотите принимающей простой сервер http. НПМ установки -G с HTTP-сервер

и открыть наш каталог и тип HTTP-сервер

https://www.npmjs.org/package/http-server

Комментарии (5)

Быстрый способ:

var express = require('express');
var app = express();
app.use('/', express.static(__dirname + '/../public')); // ← adjust
app.listen(3000, function() { console.log('listening'); });

Ваш путь:

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

http.createServer(function (req, res) {
    console.dir(req.url);

    // will get you  '/' or 'index.html' or 'css/styles.css' ...
    // • you need to isolate extension
    // • have a small mimetype lookup array/object
    // • only there and then reading the file
    // •  delivering it after setting the right content type

    res.writeHead(200, {'Content-Type': 'text/html'});

    res.end('ok');
}).listen(3001);
Комментарии (0)

Вместо того чтобы работать с оператором switch, я считаю, что лучше искать тип содержимого в словаре:

var contentTypesByExtension = {
    'html': "text/html",
    'js':   "text/javascript"
};

...

    var contentType = contentTypesByExtension[fileExtension] || 'text/plain';
Комментарии (2)

Это, по сути, обновленной версией принято отвечать за подключение версия 3:

var connect = require('connect');
var serveStatic = require('serve-static');

var app = connect();

app.use(serveStatic(__dirname, {'index': ['index.html']}));
app.listen(3000);

Я также добавил опцию по умолчанию, так что index.html подается по умолчанию.

Комментарии (0)

если у вас есть узел установлен на вашем PC, вероятно, вы имеете НПМ, если вы Don'т нужна NodeJS вещи, вы можете использовать служить пакет для этого:

1 - Установка пакета на ваш компьютер:

npm install -g serve

2 - служить статический папку:

serve <path> 
d:> serve d:\StaticSite

Он покажет вам, какой порт статическую папку подается, просто перейдите к узлу, как:

http://localhost:3000
Комментарии (2)

Вы Don'т должны использовать любые модули npm, чтобы запустить простой сервер, там's очень маленькая библиотека название "НПМ бесплатный сервери" для узла:

50 строк кода, выходы, если вы запрашиваете файл или папку и придает ей красный или зеленый цвет, если он не работал. Менее 1 Кб (сжатый).

Комментарии (3)

Я нашел интересную библиотеку по НПМ, которые могут пригодиться вам. Это's посетило мим(НПМ установить мим или https://github.com/broofa/node-mime) и он может определить тип MIME файла. Здесь'ы пример веб-сервер я написал, используя это:

var mime = require("mime"),http = require("http"),fs = require("fs");
http.createServer(function (req, resp) {
path  = unescape(__dirname + req.url)
var code = 200
 if(fs.existsSync(path)) {
    if(fs.lstatSync(path).isDirectory()) {
        if(fs.existsSync(path+"index.html")) {
        path += "index.html"
        } else {
            code = 403
            resp.writeHead(code, {"Content-Type": "text/plain"});
            resp.end(code+" "+http.STATUS_CODES[code]+" "+req.url);
        }
    }
    resp.writeHead(code, {"Content-Type": mime.lookup(path)})
    fs.readFile(path, function (e, r) {
    resp.end(r);

})
} else {
    code = 404
    resp.writeHead(code, {"Content-Type":"text/plain"});
    resp.end(code+" "+http.STATUS_CODES[code]+" "+req.url);
}
console.log("GET "+code+" "+http.STATUS_CODES[code]+" "+req.url)
}).listen(9000,"localhost");
console.log("Listening at http://localhost:9000")

Это будет служить любой обычный текст или файл изображения (.формате HTML .в CSS, .Яш, .формат PDF, .формат JPG, .ПНГ .M4A и .MP3, являются расширениями я'вэ проверить, но это теория, она должна работать на все) <Н1>разработчик отмечает</Н1>

Вот пример вывода, который я получил с ним:

Listening at http://localhost:9000
GET 200 OK /cloud
GET 404 Not Found /cloud/favicon.ico
GET 200 OK /cloud/icon.png
GET 200 OK /
GET 200 OK /501.png
GET 200 OK /cloud/manifest.json
GET 200 OK /config.log
GET 200 OK /export1.png
GET 200 OK /Chrome3DGlasses.pdf
GET 200 OK /cloud
GET 200 OK /-1
GET 200 OK /Delta-Vs_for_inner_Solar_System.svg

Обратите внимание на функции раскодировал в строительстве путь. Это позволит для файлов с пробелами и закодированных символов.

Комментарии (0)

Редактировать:

Пример приложения Node.js Node Chat обладает нужной вам функциональностью.
В его README.textfile 3. Шаг - это то, что вы ищете.

step1

  • создайте сервер, отвечающий на приветствие hello world на порту 8002

шаг2

  • создайте index.html и обслуживайте его

шаг3

  • внедряем util.js
  • измените логику так, чтобы обслуживался любой статический файл
  • показывать 404 в случае, если файл не найден

шаг 4

  • добавьте jquery-1.4.2.js
  • добавить client.js
  • измените index.html, чтобы он запрашивал у пользователя никнейм

Вот server.js

Здесь util.js

Комментарии (5)

Как я делаю это в первую очередь установите статический узел в глобальном масштабе через

npm install node-static -g

затем перейдите в каталог, содержащий HTML-файлов и запустить статический сервер "статический".

:8080/"в yourHtmlFile и quot перейти на браузер и введите localhost в;`.

Комментарии (2)

В основном копируя принято отвечать, но избегая создания файла JS.

$ node
> var connect = require('connect'); connect().use(static('.')).listen(8000);

Нашли его очень удобным.

Обновление ## Как в последней версии Экспресс, служить статические стала отдельно промежуточного. Используйте это, чтобы служить:

require('http').createServer(require('serve-static')('.')).listen(3000)

Установки служат статические первым.

Комментарии (0)
var http = require('http');
var fs = require('fs');
var index = fs.readFileSync('index.html');

http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/html'});
    // change the to 'text/plain' to 'text/html' it will work as your index page
    res.end(index);
}).listen(9615);

Я думаю, что вы где искали этого. В index.html просто наполните ее обычной HTML - код- все, что вы хотите представить, как:


    <h1>Hello world</h1>
Комментарии (0)

Я использую ниже код, чтобы запустить простой веб-сервер, которые делают по умолчанию HTML-файл, если нет файла, указанного в URL.

var http = require('http'),
fs = require('fs'),
url = require('url'),
rootFolder = '/views/',
defaultFileName = '/views/5 Tips on improving Programming Logic   Geek Files.htm';

http.createServer(function(req, res){

    var fileName = url.parse(req.url).pathname;
    // If no file name in Url, use default file name
    fileName = (fileName == "/") ? defaultFileName : rootFolder + fileName;

    fs.readFile(__dirname + decodeURIComponent(fileName), 'binary',function(err, content){
        if (content != null && content != '' ){
            res.writeHead(200,{'Content-Length':content.length});
            res.write(content);
        }
        res.end();
    });

}).listen(8800);

Он будет обрабатывать все js, css и изображения файл, вместе со всеми HTML-содержимого.

Согласен на заявление, что "Нет содержания-типа лучше, чем неправильныйи"

Комментарии (0)

Я'м не уверен, если это именно то, что вы хотели, однако, вы можете попытаться изменить:

{'Content-Type': 'text/plain'}

к этому:

{'Content-Type': 'text/html'}

Это будет иметь клиентский браузер отображает файл как HTML вместо обычного текста.

Комментарии (1)

Немного более подробный Экспресс-4.X версии, но и предоставит список каталогов, сжатие, кэширование и запросов на регистрацию в минимальное количество линий

var express = require('express');
var compress = require('compression');
var directory = require('serve-index');
var morgan = require('morgan'); //logging for express

var app = express();

var oneDay = 86400000;

app.use(compress());
app.use(morgan());
app.use(express.static('filesdir', { maxAge: oneDay }));
app.use(directory('filesdir', {'icons': true}))

app.listen(process.env.PORT || 8000);

console.log("Ready To serve files !")
Комментарии (0)

Вы можете просто ввести в консоли ш справку по NPX служить

РЕПО: https://github.com/zeit/serve.

Комментарии (0)