Crea un server web HTTP in Node.js con Code Esempio

โšก Riepilogo intelligente

Con Node.js รจ possibile creare un server web funzionante in poche righe di codice utilizzando il modulo http integrato. Il server si mette in ascolto su una porta prescelta e risponde a ogni richiesta con un codice di stato e un corpo della risposta, mentre un codice separato si occupa di recuperare i dati da altri siti.

  • ๏ธ Creazione del server: Il metodo http.createServer registra una funzione di callback che viene eseguita una sola volta per ogni richiesta in entrata e riceve gli oggetti richiesta e risposta.
  • ๐Ÿ”ข Stato e intestazioni: writeHead invia il codice di stato e il Content-Type prima che venga scritto qualsiasi contenuto del corpo.
  • ???? Collegamento delle porte: Il comando server.listen collega l'applicazione a una porta, e si puรฒ scegliere un qualsiasi numero di porta libero.
  • ๐Ÿ“ฅ Richieste in uscita: Per recuperare dati da un altro sito รจ necessario un client HTTP, e Node ora include una funzione fetch globale.
  • โš ๏ธ Cliente obsoleto: Il modulo di richiesta รจ stato deprecato nel febbraio 2020 e non dovrebbe essere utilizzato nel nuovo codice.
  • ๏ธ Errori di avvio: Un errore EADDRINUSE indica che la porta selezionata รจ giร  occupata da un altro processo.

Crea un server Web HTTP in Node.js

Migliori Node.js Il framework viene utilizzato principalmente per creare applicazioni basate su server. Puรฒ essere facilmente impiegato per realizzare server web che forniscono contenuti agli utenti.

Diversi moduli gestiscono le richieste relative al server, il modulo integrato http Tra questi, il modulo principale. Vedremo come creare un'applicazione server web di base utilizzando Node.js e poi come richiedere dati da un altro sito.

Nodo come server Web utilizzando HTTP

Vediamo un esempio di come creare ed eseguire la prima applicazione Node.js.

L'applicazione crea un semplice modulo server che รจ in ascolto sulla porta 7000. Quando viene effettuata una richiesta tramite il browser su quella porta, il server invia un Ciao a tutti risposta al cliente.

Nodo come server Web utilizzando HTTP

Code Spiegazione

  1. Migliori require la funzione legge un JavaCopione file, lo esegue e restituisce il suo oggetto exports. Qui carica il http modulo in modo che la sua funzionalitร  sia disponibile nell'applicazione.
  2. Un'applicazione server viene creata a partire da una semplice funzione. Tale funzione viene eseguita ogni volta che una richiesta raggiunge il server.
  3. Quando viene ricevuta una richiesta, la risposta viene inviata con lo stato di 200Questo รจ il codice di stato standard in un'intestazione HTTP per una risposta positiva.
  4. Il corpo della risposta stesso รจ la stringa Ciao a tutti.
  5. server.listen Consente all'applicazione di rimanere in ascolto delle richieste dei client sulla porta 7000. รˆ possibile utilizzare qualsiasi porta disponibile.

Se il comando viene eseguito correttamente, nel browser viene visualizzato il seguente output.

Uscita

Output del server web Node

Dall'output:

  • Navigazione verso localhost URL sulla porta 7000 visualizza la stringa Ciao a tutti nella pagina.
  • Poichรฉ il codice specifica la porta 7000, l'output รจ visibile solo quando si accede a quella porta.

Ecco il codice di riferimento:

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

Gestione delle richieste GET in Node.js

Effettuare una richiesta GET per recuperare dati da un altro sito รจ semplice in Node.js. Storicamente ciรฒ richiedeva request modulo, installato dalla riga di comando:

npm install request

Quel comando chiede al gestore di pacchetti Node di scaricare il modulo richiesto e di installarlo. Quando l'installazione ha successo, la riga di comando mostra il nome e la versione del modulo installato nel formato <name>@<version>.

output della richiesta di installazione npm

Nell'istantanea qui sopra, il request Il modulo e il relativo numero di versione sono stati scaricati e installati.

Effettuare una richiesta GET in Node.js

Code Spiegazione

  1. Migliori request Il modulo installato nel passaggio precedente fornisce le funzioni necessarie per effettuare richieste GET ai siti web.
  2. Viene effettuata una richiesta GET a un sito e, una volta ricevuta la risposta, viene eseguita una funzione di callback. La funzione di callback riceve tre parametri:
    1. Errore โ€” registra qualsiasi errore riscontrato durante l'esecuzione della richiesta.
    2. Risposta โ€” contiene le intestazioni HTTP restituite con la risposta.
    3. Corpo โ€” contiene l'intero contenuto della risposta.
  3. Il contenuto ricevuto nel body Il parametro viene scritto sulla console.

Ecco il codice di riferimento:

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

โš ๏ธ Avviso di deprecazione: , il request modulo era Completamente deprecato nel febbraio 2020 e non riceve ulteriori aggiornamenti. Si installa e funziona ancora, quindi l'esempio di cui sopra rimane valido per i progetti esistenti, ma npm install request ora stampa un avviso di deprecazione. Il nuovo codice dovrebbe utilizzare quello integrato fetch funzione mostrata nella sezione successiva.

Come effettuare richieste HTTP con fetch nativo in Node.js

Node ha incluso un globale fetch funzione dalla versione 18, corrispondente all'API giร  fornita dai browser. Non รจ richiesta alcuna installazione di pacchetti e la funzione restituisce una promise, quindi funziona direttamente con 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();

Tre differenze rispetto allo stile di callback meritano di essere notate. In primo luogo, fetch rifiuta solo in caso di errore a livello di rete; un HTTP 404 o 500 si risolve comunque correttamente, motivo per cui response.ok il controllo esiste e perchรฉ ometterlo รจ l'errore piรน comune quando si passa da request. In secondo luogo, il corpo non viene consegnato con la risposta โ€” deve essere letto esplicitamente con response.text() per testo semplice o response.json() per JSON, e ognuno di questi restituisce una promessa propria. Terzo, poichรฉ l'intera chiamata รจ basata su promise, una singola try/catch copre sia la richiesta che la lettura del corpo, sostituendo completamente il parametro di callback error-first.

Per gli script che devono essere eseguiti su Node 16 o versioni precedenti, installare node-fetch or axios invece, poichรฉ entrambi espongono un'interfaccia basata su promise comparabile e richiedono solo una modifica alla riga di importazione una volta aggiornato il runtime.

request vs fetch vs axios: quale usare?

Nella maggior parte della documentazione su Node.js compaiono tre client HTTP, ma solo uno di essi rappresenta una scelta predefinita sensata per i nuovi progetti. Differiscono per lo stato di manutenzione, per la necessitร  o meno di una dipendenza e per il modo in cui ciascuno segnala uno stato di errore; la tabella seguente li mette quindi a confronto.

Aspetto richiesta recuperare (integrato) Axios
Stato Obsoleto dal 2020 Mantenuto nel nucleo Mantenuto attivamente
Installazione pacchetto npm Nessuno sul nodo 18+ pacchetto npm
Style Callback con prioritร  agli errori Promessa Promessa
Analisi JSON Manuale o opzione JSON Manuale tramite response.json() Automatico
Rifiutato con errore 404 o 500 Non Non Si

Usa il fetch per i nuovi progetti su una versione corrente di Node, poichรฉ non aggiunge dipendenze e corrisponde all'API del browser che gli sviluppatori giร  conoscono. Scegli axios quando la gestione automatica di JSON, gli intercettori di richieste o il rifiuto in caso di errori consentirebbero di risparmiare codice reale. Mantieni request solo all'interno di applicazioni legacy che giร  ne dipendono e che prevedono di sostituirlo.

Errori comuni del server Node.js e come risolverli

La maggior parte degli errori che si verificano all'avvio di un primo server Node derivano da porte, percorsi o risposte mancanti, piuttosto che dal codice del server stesso.

  • ADRENALINA: Un altro processo occupa giร  la porta. Esegui netstat -ano | findstr :7000 on Windows, o lsof -i :7000 on macOS e Linux, quindi interrompi quel processo o scegli una porta diversa.
  • EACCES su porta bassa: Le porte inferiori a 1024 richiedono privilegi elevati. Durante lo sviluppo, utilizzare una porta superiore a 1024, come la 3000 o la 7000.
  • Il browser si blocca e non carica mai: il gestore non ha mai chiamato response.end()La connessione rimane aperta fino allo scadere del tempo limite, quindi ogni percorso attraverso il gestore deve terminare la risposta.
  • Impossibile trovare il modulo 'http': Il nome del file รจ stato digitato in modo errato oppure lo script รจ in esecuzione in un browser anzichรฉ in Node. I moduli principali non richiedono installazione.
  • Non vengono visualizzate modifiche: Node carica il file una volta all'avvio. Riavvia il processo dopo ogni modifica oppure eseguilo sotto un watcher come node --watch server.js.

DOMANDE FREQUENTI

Il modulo http รจ sufficiente per un singolo endpoint. Express aggiunge routing, middleware e analisi del corpo della richiesta, funzionalitร  che diventano indispensabili quando un'applicazione gestisce diverse rotte.

Richiedi il https modulo invece e passa una chiave e un certificato a createServer. In produzione, un proxy inverso come Nginx normalmente termina TLS e inoltra HTTP semplice a Node.

Sรฌ. Le serrature scorrevoli portatili e i catenacci a superficie possono essere usati per mettere in sicurezza una porta a scomparsa dall'esterno. Alcuni kit con catena di sicurezza consentono anche il bloccaggio esterno con chiave o manopola girevole. AI Gli strumenti convertono in modo affidabile le callback che iniziano con un errore in await asincroni. Verifica che il codice generato aggiunga un test response.ok, perchรฉ fetch si risolve in caso di errore 404 e questo controllo viene spesso omesso.

Gli assistenti basati sull'IA leggono il codice di errore e ne identificano direttamente la causa, distinguendo un conflitto di porte da un problema di permessi o da un errore di sintassi, riducendo notevolmente le incertezze in un primo progetto Node.

L'oggetto request รจ uno stream, quindi raccogli i suoi eventi dati in un buffer e analizza il risultato all'evento finale. Express e framework simili forniscono middleware per l'analisi del corpo della richiesta che eseguono questo passaggio automaticamente.

Riassumi questo post con: