Utwórz serwer HTTP w Node.js za pomocą Code Przykład
⚡ Inteligentne podsumowanie
Node.js buduje działający serwer WWW w kilku linijkach, wykorzystując wbudowany moduł http. Serwer nasłuchuje na wybranym porcie i odpowiada na każde żądanie, podając kod statusu i treść, podczas gdy osobny kod pobiera dane z innych stron.

node.js Framework jest używany głównie do tworzenia aplikacji serwerowych. Można go z łatwością wykorzystać do budowy serwerów WWW, które udostępniają treści użytkownikom.
Kilka modułów obsługuje żądania związane z serwerem, wbudowany http Moduł jest jednym z najważniejszych. Przyjrzymy się, jak stworzyć prostą aplikację serwera WWW w Node.js, a następnie jak zażądać danych z innej witryny.
Węzeł jako serwer WWW korzystający z protokołu HTTP
Przyjrzyjmy się przykładowi tworzenia i uruchamiania pierwszej aplikacji Node.js.
Aplikacja tworzy prosty moduł serwera, który nasłuchuje na porcie 7000. Gdy przeglądarka wysyła żądanie na ten port, serwer wysyła Witaj świecie odpowiedź dla klienta.
Code Wyjaśnienie
-
requirefunkcja odczytuje JAVASCRIPT plik, uruchamia go i zwraca obiekt eksportu. Tutaj ładujehttpmodułu, aby jego funkcjonalność była dostępna w aplikacji. - Aplikacja serwerowa jest tworzona z prostej funkcji. Funkcja ta jest uruchamiana za każdym razem, gdy żądanie dociera do serwera.
- Po otrzymaniu żądania, odpowiedź jest wysyłana ze statusem 200To standardowy kod statusu w nagłówku HTTP informujący o pomyślnej odpowiedzi.
- Treść odpowiedzi jest sama w sobie ciągiem znaków Witaj świecie.
server.listensprawia, że aplikacja nasłuchuje żądań klienta na porcie 7000. Można użyć dowolnego dostępnego portu.
Jeśli polecenie zostanie wykonane pomyślnie, w przeglądarce pojawi się następujący komunikat.
Wydajność
Z wyników:
- Przeglądanie do localhosta URL na porcie 7000 wyświetla ciąg Witaj świecie na stronie.
- Ponieważ kod określa port 7000, dane wyjściowe będą widoczne tylko po przejściu do tego portu.
Oto kod, dla porównania:
var http = require('http'); var server = http.createServer(function(request, response) { response.writeHead(200, { "Content-Type": "text/plain" }); response.end("Hello World\n"); }); server.listen(7000);
Obsługa żądań GET w Node.js
W Node.js żądanie GET w celu pobrania danych z innej witryny jest proste. Historycznie wymagało to request moduł, zainstalowany z wiersza poleceń:
npm install request
To polecenie prosi menedżera pakietów Node o pobranie i zainstalowanie wymaganego modułu. Po pomyślnej instalacji w wierszu poleceń wyświetlana jest nazwa i wersja zainstalowanego modułu w formacie <name>@<version>.
Na powyższym zrzucie ekranu widać, request moduł i jego numer wersji zostały pobrane i zainstalowane.
Code Wyjaśnienie
-
requestModuł zainstalowany w poprzednim kroku udostępnia funkcje niezbędne do wysyłania żądań GET do stron internetowych. - Żądanie GET jest wysyłane do witryny, a po otrzymaniu odpowiedzi uruchamiane jest wywołanie zwrotne. Wywołanie zwrotne otrzymuje trzy parametry:
- Błąd — rejestruje wszelkie błędy wykryte podczas tworzenia żądania.
- Odpowiedź — zawiera nagłówki HTTP zwrócone w odpowiedzi.
- Ciało — zawiera całą treść odpowiedzi.
- Treść otrzymana w
bodyparametr jest zapisywany na konsoli.
Oto kod, dla porównania:
var request = require("request"); request("https://example.com", function(error, response, body) { // Always check the error parameter before using the body if (error) { console.error("Request failed:", error.message); return; } console.log(body); });
⚠️ Informacja o wycofaniu: dotychczasowy request moduł był całkowicie wycofane w lutym 2020 r. i nie otrzymuje dalszych aktualizacji. Nadal się instaluje i działa, więc powyższy przykład pozostaje ważny dla istniejących projektów, ale npm install request teraz wyświetla ostrzeżenie o wycofaniu. Nowy kod powinien używać wbudowanego fetch Funkcja pokazana w następnej sekcji.
Jak tworzyć żądania HTTP z natywnym pobieraniem w Node.js
Węzeł zawiera globalny fetch Funkcja od wersji 18, zgodna z API już dostępnym w przeglądarkach. Instalacja pakietu nie jest wymagana, a funkcja zwraca obietnicę, więc działa bezpośrednio z async/await.
// No require and no npm install needed on Node 18 or later async function getData() { try { const response = await fetch("https://example.com"); // fetch does NOT reject on 404 or 500 — check ok yourself if (!response.ok) { throw new Error("HTTP status " + response.status); } const body = await response.text(); console.log(body); } catch (err) { // Network failures and the throw above both land here console.error("Request failed:", err.message); } } getData();
Warto zwrócić uwagę na trzy różnice w stosunku do stylu wywołania zwrotnego. Po pierwsze, fetch odrzuca tylko w przypadku awarii na poziomie sieci; błąd HTTP 404 lub 500 nadal jest rozwiązywany pomyślnie, dlatego response.ok istnieje check i dlaczego jego pominięcie jest najczęstszym błędem przy przechodzeniu z requestPo drugie, treść nie jest dostarczana wraz z odpowiedzią — należy ją odczytać w sposób wyraźny. response.text() dla zwykłego tekstu lub response.json() dla JSON, a każdy z nich zwraca własną obietnicę. Po trzecie, ponieważ całe wywołanie jest oparte na obietnicy, pojedyncza try/catch obejmuje zarówno żądanie, jak i odczyt treści, całkowicie zastępując parametr wywołania zwrotnego błędu.
W przypadku skryptów, które muszą działać na Node 16 lub starszym, zainstaluj node-fetch or axios zamiast tego, ponieważ oba udostępniają porównywalny interfejs oparty na obietnicach i wymagają jedynie zmiany w wierszu importu po uaktualnieniu środowiska wykonawczego.
żądanie vs pobieranie vs axios: Którego użyć
W większości materiałów Node pojawiają się trzy klienty HTTP, a tylko jeden z nich jest rozsądnym domyślnym rozwiązaniem dla nowych projektów. Różnią się one statusem konserwacji, tym, czy zależność jest w ogóle potrzebna, oraz sposobem sygnalizowania błędu, dlatego poniższa tabela zestawia je obok siebie.
| WYGLĄD | zażądać | pobierz (wbudowany) | aksjos |
|---|---|---|---|
| Status | Przestarzałe od 2020 r. | Utrzymywane w rdzeniu | Aktywnie utrzymywane |
| instalacja sprzętu | pakiet npm | Brak na Node 18+ | pakiet npm |
| Styl | Wywołanie zwrotne w pierwszej kolejności błędu | Obietnica | Obietnica |
| Analiza składniowa JSON | Ręcznie lub opcja JSON | Manualnie przez response.json() | automatycznie |
| Odrzucenia na 404 lub 500 | Nie | Nie | Tak |
Zastosowanie fetch dla nowych projektów w aktualnej wersji Node, ponieważ nie dodaje żadnych zależności i jest zgodna z interfejsem API przeglądarki, który jest już znany programistom. Wybierz axios gdy automatyczne przetwarzanie JSON, przechwytywanie żądań lub odrzucanie w przypadku błędów pozwalałoby na zapisanie prawdziwego kodu. Zachowaj request tylko w starszych aplikacjach, które już od niego zależą i planują go zastąpić.
Typowe błędy serwera Node.js i jak je naprawić
Większość błędów podczas uruchamiania pierwszego serwera Node wynika z portów, ścieżek lub brakujących odpowiedzi, a nie z samego kodu serwera.
- EADRYNAZA: Inny proces już posiada port. Uruchom
netstat -ano | findstr :7000on Windowslublsof -i :7000on macOS i Linux, zatrzymaj ten proces lub wybierz inny port. - EACCES na niskim porcie: Porty poniżej 1024 wymagają podwyższonych uprawnień. Podczas tworzenia oprogramowania należy używać portu powyżej 1024, np. 3000 lub 7000.
- Przeglądarka zawiesza się i nigdy się nie ładuje: opiekun nigdy nie zadzwonił
response.end()Połączenie pozostaje otwarte do momentu upłynięcia limitu czasu, więc każda ścieżka przez moduł obsługi musi kończyć odpowiedź. - Nie można znaleźć modułu 'http': Nazwa pliku jest błędnie wpisana lub skrypt działa w przeglądarce, a nie w Node. Moduły główne nie wymagają instalacji.
- Zmiany nie są widoczne: Węzeł ładuje plik jednorazowo podczas uruchamiania. Po każdej edycji należy ponownie uruchomić proces lub uruchomić go pod kontrolą, np.
node --watch server.js.




