Простой веб-сервер на Node.js
Для создания простейшего веб-сервера нам понадобится модуль http
и его метод createServer()
, который будет вызываться каждый раз когда на сервер поступает http-запрос. В самом методе createServer()
опишем пару заголовков и html ответ, который получит пользователь при оправке http-запроса на ip адрес компьютера, с запущенным node сервером.
Для начала создадим файл server.js
в рабочей директории (имя файла не важно).
touch /var/www/nodejs-app/server.js
Далее отредактируем его следующим образом. В примере я использую порт 46000, т.к. он находится в списке открытых портов в моём файлволле.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
var http = require('http'); // Определяем порт, на котором будет работать сервер. // !Порт не должен быть занят или закрыт в файрволле! var port = 46000; // Определяем параметры ответа на запросы к серверу http.createServer(function(req,res){ // Устанавливаем заголовки ответа сервера res.writeHead(200, { 'Content-Type': 'text/html', // Заголовок: тип документа 'Custom-Header': 'Hello user!' // Кастомный заголовок }); // Прекращаем процесс ответа и отсылаем данные (строку) res.end('<h1>Hello world!</h1>'); }).listen(port); console.log('Node сервер запущен на localhost:'+ port + '. Нажмите Ctrl+C для остановки сервера.') |
Теперь запустим наш веб-сервер.
[meliorem@centos /var/www/nodejs-app]$ node server
Node сервер запущен на localhost:46000. Нажмите Ctrl+C для остановки сервера.
Перейдем по адресу localhost:46000
для отправки одного единственного запроса и получим следующий ответ от сервера.
Обработка URL-адресов и отправка статических файлов в Node.js
Если вы работали с веб-серверами Apache или IIS, то наверняка знаете, что обработка URL и отправка статических файлов происходит в них автоматически и без лишних усилий. Node.js, в свою очередь, требует от нас вручную устанавливать методы парсинга URL-адресов, а также открывать, считывать и отправлять запрошенные пользователем файлы.
Далее рассмотрим пример создания директории www
, в которой будут хранится статические html-файлы (index.html, about.html, 404.html) и изображение (img/logo.png) для нашего условного сайта.
Создадим необходимые файлы в рабочей директории.
mkdir -p /var/www/nodejs-app/www/img
touch /var/www/nodejs-app/www/{index.html,about.html,404.html}
Заполним файлы простым содержимым.
echo "<h1>Главная страница</h1>" > /var/www/nodejs-app/www/index.html
echo "<h1>О нас</h1>" > /var/www/nodejs-app/www/about.html
echo "<h1>Страница не найдена!</h1>" > /var/www/nodejs-app/www/404.html
Перейдем к редактированию файла server.js
.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
var http = require('http'), fs = require('fs'); // Подключаем модуль для работы с файлами // Создаем функцию для отправки файлов по запросу function sendFile(res, path, contentType, resCode){ // Если последний параметр resCode не указан, // то устанавливаем код: 200 умолчанию if(!resCode) resCode = 200; // Считывание и отправка файла сайта fs.readFile(__dirname + path, function(err, data){ if(err) { res.writeHead(500, {'Content-Type': 'text/plain; charset=utf-8'}); res.end('500: Ошибка сервера'); } else { res.writeHead(resCode, {'Content-Type': contentType + '; charset=utf-8'}); res.end(data); } }); } // Пример метода отправки JSON данных function sendJSON(res, data, resCode){ if(!resCode) resCode = 200; res.writeHead(resCode, {'Content-Type': 'application/json'}); // Переводим json в строку res.end(JSON.stringify(data)); } var server = http.createServer(function(req,res){ // Преобразуем имя пути к нормальному виду var path = req.url.replace(/\/?(?:\?.*)?$/, '').toLowerCase(); switch(path){ case '': sendFile(res, '/www/index.html', 'text/html'); break; case '/about': sendFile(res, '/www/about.html', 'text/html'); break; case '/img/logo.svg': sendFile(res, '/www/img/logo.svg', 'image/svg+xml'); break; case '/jsondata': var people = [{'name': 'Jade', 'age': '20'},{'name': 'John', 'age': '32'}] sendJSON(res, people); default: sendFile(res, '/www/404.html', 'text/html', 404); break; } }); server.listen(46000); console.log('Server started! Ctrl+C to terminate.') |
После запуска node сервера, мы сможем перейти к указанным в server.js
файлам.
node server.js