node js

Node.js – wprowadzenie9 listopada 2015

Z naszego wpisu dowiesz się:

Do przeczytania naszego wpisu zachęcamy wszystkie osoby, które jeszcze nie miały przyjemności poznania pracy z node.js!

Czym jest node.js?

Node.js jest platformą zbudowaną w oparciu o javascriptowy, pochodzący od Google silnik V8. W skrócie – umożliwia uruchamianie skryptów JavaScript po stronie serwera. Główną cechą aplikacji tworzonych w środowisku Node.js jest sterowanie ich zdarzeniami poprzez wykorzystanie asynchroniczności systemu wejścia/wyjścia (I/O). Skąd ciągły wzrost zwolenników tej platformy? Czynników może być wiele, lecz przyczyny doszukiwać się można w popularności samego JavaScriptu oraz łatwości użycia gotowych i udostępnionych modułów, dzięki którym w kilka minut można np. uruchomić swój własny serwer HTTP.

Od czego zacząć pracę z node.js?

Rozpoczęcie pracy z platformą jest stosunkowo proste. Na początku należy odwiedzić oficjalną stronę nodejs.org, ściągnąć na dysk najnowszą stabilną wersję instalatora i przejść proces instalacji.

Aby sprawdzić, czy instalacja przebiegła prawidłowo, należy uruchomić konsolę i wywołać polecenie node -v  . Rezultatem będzie informacja o wersji zainstalowanego Node.js:

$ node -v
v4.1.2

Jak stworzyć skrypt w node.js?

Gdy jesteśmy pewni, że instalacja przebiegła poprawnie, możemy zabrać się za napisanie przykładowego skryptu, który spróbujemy uruchomić w środowisku Node.js. Na początku stwórzmy plik o nazwie test.js. W nim zamieścimy linijkę odpowiadającą wypisaniu “Hello world” na okno konsoli:

console.log("Hello world!");

Następnie przechodzimy do okna konsoli i uruchamiamy skrypt poleceniem node test.js:

$ node test.js
Hello world!

 

Powyższym przykładem udowodniliśmy, że instalacja Node.js i uruchomienie prostego skryptu nie stanowi większego problemu.

Jak stworzyć serwer w node.js?

Idąc krok dalej spróbujmy uruchomić prosty serwer HTTP w oparciu o Node.js. Zanim jednak przystąpimy do implementacji serwera wszystkim tym, którzy tak jak ja pracują na co dzień z Visual Studio (na potrzeby tego wpisu korzystam z wersji VS 2015 Community), pokażę jak możemy przygotować to środowisko do pracy z Node.js. Do tego celu potrzebne nam będzie narzędzie Node.js Tools for VS. Można je pobrać TUTAJ:

NTFVS

Po pobraniu plików przechodzimy kolejne kroki instalacji. Poprawna instalacja zakończy się stosownym komunikatem:

 

Od tej pory z poziomu szablonów projektów Visual Studio dostępne są nowe szablony – dedykowane Node.js. Spróbujmy stworzyć testowy projekt. Uruchamiamy Visual Studio, następnie wybieramy New -> Project…:

Z listy szablonów wybieramy kolejno: Templates > JavaScript > Node.js . Projektem, który nas interesuje jest Blank Node.js Console Application . Wpisujemy nazwę dla projektu –SampleConsoleApp  – i klikamy OK  

Możemy przyjrzeć się plikom wchodzącym w skład naszego projektu:

vs_tools_10

  • npm – instalator paczek dla Node.js – tutaj wskazuje informację jakie paczki zostały zainstalowane
  • app.js – główny skrypt projektu
  • package.json – informacje o naszym projekcie takie jak: nazwa, strona domowa, opis, autorzy. Ponadto znajdują się tutaj dane o pakietach, z których korzystamy.

Rezultat działania tego przykładowego projektu będzie tożsamy z uruchomieniem skryptu, który wywoływaliśmy z poziomu konsoli – na ekranie w oknie konsoli pojawi się napis “Hello world!”

Czas na implementację czegoś ciekawszego!

Stwórzmy prosty serwer HTTP, który będzie posiadać zaimplementowaną obsługę żądań POST i GET. Na początku analogicznie do powyższego przykładu stwórzmy nowy projekt Node.js. Tym razem jako typ projektu wybieramy Blank Node.js Web Application. Określamy nazwę dla projektu (ServerTest) i klikamy OK.

vs_tools_11

Stworzony projekt zawiera plik server.js z następującą zawartością:

var http = require('http');
var port = process.env.port || 1007;
http.createServer(function (req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello World\n');
}).listen(port);

 

Przyjrzyjmy się dokładniej poszczególnym linijkom naszego kodu:

Node.js posiada system ładowania modułów. Wywołanie funkcji require powoduje wczytanie wskazanego modułu. W tym przypadku – HTTP:

var http = require('http');

 

Następnie określamy port, na którym będzie działać nasz serwer HTTP. Jeżeli numer portu nie został określony w zmiennych środowiskowych, użyjemy portu 1007:

var port = process.env.port || 1007;

 

W kolejnej linijce naszego skryptu za pomocą funkcji http.createServer zwracamy nową instancję serwera (http.server). Jako parametr przekazujemy funkcję z dwoma argumentami stanowiącymi callback dla obsługi żądań (request) i odpowiedzi (response) serwera.

http.createServer(function (req, res) {
...

 

W kolejnym kroku za pomocą funkcji writeHead określamy informację o nagłówku wysyłanej wiadomości. Ustawiamy odpowiedź dotyczącą statusu (200 OK) oraz format odpowiedzi.

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

 

Następnym etapem jest wywołanie funkcji end, za pomocą której wysyłamy konkretną zawartość odpowiedzi w formacie zgodnym z informacjami z nagłówka wiadomości. W naszym przypadku wysyłamy plain text.

res.end('Hello World\n');

 

Końcowym etapem jest wywołanie funkcji definiującej uruchomienie serwera i rozpoczęcie nasłuchiwania żądań na wskazanym porcie.

...
}).listen(port);

 

Uruchamiając projekt, naszym oczom powinno ukazać się okno przeglądarki internetowej, w której zostanie wyświetlona zwrócona przez serwer strona www z napisem: “Hello world”.

vs_tools_12

Rozszerzmy teraz implementację naszego serwera o bardzo prostą obsługę żądań POST i GET:


var http = require('http');
var qs = require('querystring');
var port = process.env.port || 1007;

var pageHTML = '' +
'' +
'Sample test Node.js Web Server' +
'' +
'' +
'' +
'

<form action="" method="post">' +
'
<div>' +
'<label for="firstName">First Name:</label>' +
'' +
'<label for="firstName">Last Name:</label>' +
'' +
'</div>
' +
'
<div>' +
'' +
'</div>
' +
'

</form>' +
'' +
'';

var server = http.createServer(function (req, res) {
var requestData = '';
if (req.method === "GET") {
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end(pageHTML);
} else if (req.method === "POST") {
req.setEncoding('utf-8');
req.on('data', function (data) {
requestData += data;
});
req.on('end', function () {
var postData = qs.parse(requestData);
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('
<h1>Your Name: ' + postData.firstName + ' ' + postData.lastName + '</h1>
');
});
}
});
server.listen(port);

 

Stworzony serwer, podczas obsługi żądania sprawdza typ żądania. Jeżeli jest to GET, wysyła do przeglądarki kod HTML wraz z przygotowanym formularzem. Jeżeli trafia do niego żądanie POST, przetwarza przychodzące dane, po czym generuje odpowiedź do przeglądarki, zwracając tekst wysłany z formularza:

req.on('data', function (data) {
requestData += data;
});
req.on('end', function () {
var postData = qs.parse(requestData);
res.writeHead(200, { 'Content-Type': 'text/html' });
res.end('
<h1>Your Name: ' + postData.firstName + ' ' + postData.lastName + '</h1>
');
});

Przykłady przedstawione w powyższym wpisie potwierdzają łatwość użycie i szykość implementacji w Node.js. Wszystkich początkujących, których zainteresował temat Node.js, zapraszam do zapoznania się z The Node Beginner book. Jest to przewodnik, który krok po kroku wyjaśnia podstawy korzystania z opisywanej platformy.

Interesujesz się programowaniem i tworzeniem dedykowanych aplikacji?

Pozostań z nami w kontakcie - polub nas w mediach społecznościowych!

Odwiedź nasz profil na FB!
Odwiedź nasz profil na FB!
Zobacz nasze filmy na YT!
Odwiedź nasz profil na LI!
Zobacz inne wpisy: