it-roy-ru.com

Использование 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?

1033
idophir

Для этого вы можете использовать Connect и ServeStatic с Node.js:

  1. Установить соединение и служить статические с NPM

    $ npm install connect serve-static
    
  2. Создайте файл server.js со следующим содержимым:

    var connect = require('connect');
    var serveStatic = require('serve-static');
    connect().use(serveStatic(__dirname)).listen(8080, function(){
        console.log('Server running on 8080...');
    });
    
  3. Запустить с Node.js

    $ node server.js
    

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

926
Gian Marco Gherardi

Самый простой сервер Node.js это просто:

$ npm install http-server -g

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

$ cd MyApp

$ http-server

Если вы используете NPM 5.2.0 или новее, вы можете использовать http-server, не устанавливая его с npx. Это не рекомендуется для использования в рабочей среде, но это отличный способ быстро запустить сервер на локальном хосте.

$ npx http-server

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

$ http-server -o --cors

Для получения дополнительных опций проверьте документация для http-server на GitHub или выполните:

$ http-server --help

Множество других функций Nice и невероятно простое развертывание в NodeJitsu.

Функциональные вилки

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

Сервер Light: альтернатива автоматического обновления

Хорошей альтернативой http-server является 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 REST

Если вам нужно создать простой REST сервер для прототипа проекта, тогда json-server может быть тем, что вы ищете.

Редакторы автообновления

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

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

Разработчики PhoneGap

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

PhoneGap + Sencha Touch Developers

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

Cordova + Ionic Разработчики фреймворков

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

910
Tony O'Hagan

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

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");

Update

Gist работает с файлами CSS и JS. Я использовал это сам. Использование чтения/записи в "бинарном" режиме не проблема. Это просто означает, что файл не интерпретируется как текст библиотекой файлов и не связан с типом содержимого, возвращаемым в ответе.

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

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

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

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");
157
Jonathan Tran

Вам не нужно экспресс. Вам не нужно подключаться. 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)
90
B T

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

Content-Type: text/plain

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

Content-Type: text/html
67
clee

Шаг 1 (внутри командной строки [Надеюсь, вы перейдете к папке с папкой]): npm install express

Шаг 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: node server.js или nodemon server.js

Теперь есть более простой способ, если вы просто хотите разместить простой HTTP-сервер. npm install -g http-server

и откройте наш каталог и введите http-server

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

44
STEEL

Быстрый путь:

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);
29
Frank Nocke

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

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

...

    var contentType = contentTypesByExtension[fileExtension] || 'text/plain';
19
joeytwiddle

Это в основном обновленная версия принятого ответа для Connect версии 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 служил по умолчанию.

15
tomet

Вам не нужно использовать какие-либо модули NPM для запуска простого сервера, есть очень маленькая библиотека, называемая " NPM Free Server " для узла:

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

13
Jaredcheeda

если на вашем ПК установлен узел, возможно, у вас есть NPM, если вам не нужны NodeJS, вы можете использовать пакет serve для этого:

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

npm install -g serve

2 - Служите вашей статической папке:

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

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

http://localhost:3000
12
Diego Mendes

Я нашел интересную библиотеку на npm, которая может быть вам полезна. Он называется mime (npm install mime или 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, .js, .pdf, .jpg, .png, .m4a и .mp3 - это расширения, которые я тестировал, но теоретически он должен работать для всех)

Примечания разработчика

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

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

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

9
MayorMonty

Я делаю это, прежде всего, для установки статического сервера узла глобально через

npm install node-static -g

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

Перейдите в браузер и введите localhost:8080/"yourHtmlFile".

8
samba

Правка:

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

шаг 1

  • создайте сервер, который отвечает hello world на порт 8002

шаг 2

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

шаг 3

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

step4

  • добавить jquery-1.4.2.js
  • добавить client.js
  • замените index.html на запрос имени пользователя

Вот это server.js

Вот это til.js

8
Kerem Baydoğan

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

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

Нашел это очень удобно.

Обновление

Начиная с последней версии Express, serve-static стал отдельным промежуточным программным обеспечением. Используйте это, чтобы служить:

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

Сначала установите serve-static.

7
Xiao Peng - ZenUML.com
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-кодом - что бы вы ни хотели сделать, например:

<html>
    <h1>Hello world</h1>
</html>
7
Ashish Ranjan

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

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

к этому:

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

Это позволит клиенту браузера отображать файл в формате html вместо простого текста.

5
Xenry

Я использую приведенный ниже код для запуска простого веб-сервера, который отображает 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.

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

5
Sachin303

Чуть более подробная версия 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 !")
4
Bruno Grieder

Сумасшедшее количество сложных ответов здесь. Если вы не собираетесь обрабатывать файлы/базы данных nodeJS, а просто хотите использовать статические html/css/js/images, как подсказывает ваш вопрос, просто установите модуль pushstate-server или аналогичный;

Вот "один лайнер", который создаст и запустит мини-сайт. Просто вставьте весь блок в вашем терминале в соответствующую директорию.

mkdir mysite; \
cd mysite; \
npm install pushstate-server --save; \
mkdir app; \
touch app/index.html; \
echo '<h1>Hello World</h1>' > app/index.html; \
touch server.js; \
echo "var server = require('pushstate-server');server.start({ port: 3000, directory: './app' });" > server.js; \
node server.js

Откройте браузер и перейдите по адресу http: // localhost: 30 . Готово.

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

4
cyberwombat

Большинство ответов выше очень хорошо описывают, как подается содержимое. То, что я искал как дополнительный, было перечислением каталога, чтобы можно было просмотреть другое содержимое каталога. Вот мое решение для дальнейших читателей:

'use strict';

var finalhandler = require('finalhandler');
var http = require('http');
var serveIndex = require('serve-index');
var serveStatic = require('serve-static');
var appRootDir = require('app-root-dir').get();
var log = require(appRootDir + '/log/bunyan.js');

var PORT = process.env.port || 8097;

// Serve directory indexes for reports folder (with icons)
var index = serveIndex('reports/', {'icons': true});

// Serve up files under the folder
var serve = serveStatic('reports/');

// Create server
var server = http.createServer(function onRequest(req, res){
    var done = finalhandler(req, res);
    serve(req, res, function onNext(err) {
    if (err)
        return done(err);
    index(req, res, done);
    })
});


server.listen(PORT, log.info('Server listening on: ', PORT));
3
Abu Shumon

от w3schools

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

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

http.createServer(function (req, res) {
  var q = url.parse(req.url, true);
  var filename = "." + q.pathname;
  fs.readFile(filename, function(err, data) {
    if (err) {
      res.writeHead(404, {'Content-Type': 'text/html'});
      return res.end("404 Not Found");
    }  
    res.writeHead(200, {'Content-Type': 'text/html'});
    res.write(data);
    return res.end();
  });
}).listen(8080);

HTTP: // локальный: 8080/file.html

будет служить file.html с диска

3
Ahmed M. Matar

Вы можете просто напечатать те в своей Shell

npx serve

Репо: https://github.com/zeit/serve .

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

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

//Just Change The CONTENT TYPE to 'html'
3
user3389163

Уже есть несколько отличных решений для простого nodejs server. Существует еще одно решение, если вам нужен live-reloading, когда вы вносили изменения в свои файлы.

npm install lite-server -g

перейдите в свой каталог и сделайте

lite-server

это откроет браузер для вас с живой перезагрузкой.

3
lokeshjain2008

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

Sudo npm install ripple-emulator -g

С этого момента просто введите каталог ваших HTML-файлов и запустите

ripple emulate

затем измените устройство на Nexus 7 ландшафт.

2
Helzgate

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

Посмотрите здесь, чтобы начать: http://demo.sugoijs.com/ , документация: https://wiki.sugoijs.com/

Он имеет декораторы обработки запросов, декораторы политик запросов и политик авторизации.

Например:

import {Controller,Response,HttpGet,RequestParam} from "@sugoi/server";
​
@Controller('/dashboard')
export class CoreController{
    constructor(){}
​
    @HttpGet("/:role")
    test(@RequestParam('role') role:string,
         @RequestHeader("role") headerRole:string){
        if(role === headerRole )
            return "authorized";
        else{
            throw new Error("unauthorized")
        }
    }
}
1
Gen4ik

Это очень легко с тоннами библиотек, представленных сегодня. Ответы здесь являются функциональными. Если вы хотите другую версию для запуска быстрее и проще

Конечно, сначала установите node.js. Потом:

> # module with zero dependencies
> npm install -g @kawix/[email protected] 
> # change /path/to/static with your folder or empty for current
> kwcore "https://raw.githubusercontent.com/voxsoftware/kawix-core/master/example/npmrequire/express-static.js" /path/to/static

Здесь содержание " https://raw.githubusercontent.com/voxsoftware/kawix-core/master/example/npmrequire/express-static.js " (вам не нужно его загружать, я выложил для понимания как работает сзади)

// you can use like this:
// kwcore "https://raw.githubusercontent.com/voxsoftware/kawix-core/master/example/npmrequire/express.js" /path/to/static
// kwcore "https://raw.githubusercontent.com/voxsoftware/kawix-core/master/example/npmrequire/express.js" 

// this will download the npm module and make a local cache
import express from 'npm://[email protected]^4.16.4'
import Path from 'path'

var folder= process.argv[2] || "."
folder= Path.resolve(process.cwd(), folder)
console.log("Using folder as public: " + folder)

var app = express() 
app.use(express.static(folder)) 
app.listen(8181)
console.log("Listening on 8181")
1
James Suárez

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

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

var mimeTypes = {
  "html": "text/html",
  "mp3":"audio/mpeg",
  "mp4":"video/mp4",
  "jpeg": "image/jpeg",
  "jpg": "image/jpeg",
  "png": "image/png",
  "js": "text/javascript",
  "css": "text/css"};

http.createServer(function(req, res) {
    var uri = url.parse(req.url).pathname;
    var filename = path.join(process.cwd(), uri);
    fs.exists(filename, function(exists) {
        if(!exists) {
            console.log("not exists: " + filename);
            res.writeHead(200, {'Content-Type': 'text/plain'});
            res.write('404 Not Found\n');
            res.end();
            return;
        }
        var mimeType = mimeTypes[path.extname(filename).split(".")[1]];
        res.writeHead(200, {'Content-Type':mimeType});

        var fileStream = fs.createReadStream(filename);
        fileStream.pipe(res);

    }); //end path.exists
}).listen(1337);

Теперь перейдите в браузер и откройте следующее:

http://127.0.0.1/image.jpg

Здесь image.jpg должен находиться в том же каталоге, что и этот файл. Надеюсь, это поможет кому-то :)

0
Kaushal28