Node.js Tutorial
Iniziare con Node.js
Ricerca…
Osservazioni
Node.js è un framework I / O asincrono basato su eventi, non bloccante, che utilizza il motore JavaScript V8 di Google. Viene utilizzato per lo sviluppo di applicazioni che sfruttano pesantemente la possibilità di eseguire JavaScript sia sul client, sia sul lato server e quindi beneficiano della riutilizzabilità del codice e della mancanza di cambio di contesto. È open source e multipiattaforma. Le applicazioni Node.js sono scritte in puro JavaScript e possono essere eseguite all'interno dell'ambiente Node.js su Windows, Linux, ecc ...
Versioni
Versione | Data di rilascio |
---|---|
V8.2.1 | 2017/07/20 |
v8.2.0 | 2017/07/19 |
v8.1.4 | 2017/07/11 |
v8.1.3 | 2017/06/29 |
V8.1.2 | 2017/06/15 |
v8.1.1 | 2017/06/13 |
v8.1.0 | 2017/06/08 |
v8.0.0 | 2017/05/30 |
v7.10.0 | 2017/05/02 |
v7.9.0 | 2017/04/11 |
v7.8.0 | 2017/03/29 |
v7.7.4 | 2017/03/21 |
v7.7.3 | 2017/03/14 |
v7.7.2 | 2017/03/08 |
v7.7.1 | 2017/03/02 |
v7.7.0 | 2017/02/28 |
V7.6.0 | 2017/02/21 |
v7.5.0 | 2017/01/31 |
v7.4.0 | 2017/01/04 |
v7.3.0 | 2016/12/20 |
v7.2.1 | 2016/12/06 |
v7.2.0 | 2016/11/22 |
v7.1.0 | 2016/11/08 |
v7.0.0 | 2016/10/25 |
v6.11.0 | 2017/06/06 |
v6.10.3 | 2017/05/02 |
v6.10.2 | 2017/04/04 |
v6.10.1 | 2017/03/21 |
v6.10.0 | 2017/02/21 |
v6.9.5 | 2017/01/31 |
v6.9.4 | 2017/01/05 |
v6.9.3 | 2017/01/05 |
v6.9.2 | 2016/12/06 |
v6.9.1 | 2016/10/19 |
v6.9.0 | 2016/10/18 |
v6.8.1 | 2016/10/14 |
v6.8.0 | 2016/10/12 |
v6.7.0 | 2016/09/27 |
v6.6.0 | 2016/09/14 |
v6.5.0 | 2016/08/26 |
v6.4.0 | 2016/08/12 |
v6.3.1 | 2016/07/21 |
v6.3.0 | 2016/07/06 |
V6.2.2 | 2016/06/16 |
V6.2.1 | 2016/06/02 |
V6.2.0 | 2016/05/17 |
V6.1.0 | 2016/05/05 |
v6.0.0 | 2016/04/26 |
v5.12.0 | 2016/06/23 |
v5.11.1 | 2016/05/05 |
v5.11.0 | 2016/04/21 |
v5.10.1 | 2016/04/05 |
v5.10 | 2016/04/01 |
v5.9 | 2016/03/16 |
v5.8 | 2016/03/09 |
quella 5.7 | 2016/02/23 |
v5.6 | 2016/02/09 |
v5.5 | 2016/01/21 |
V5.4 | 2016/01/06 |
V5.3 | 2015/12/15 |
v5.2 | 2015/12/09 |
v5.1 | 2015/11/17 |
v5.0 | 2015/10/29 |
v4.4 | 2016/03/08 |
V4.3 | 2016/02/09 |
v4.2 | 2015/10/12 |
v4.1 | 2015/09/17 |
v4.0 | 2015/09/08 |
io.js v3.3 | 2015/09/02 |
io.js v3.2 | 2015/08/25 |
io.js v3.1 | 2015/08/19 |
io.js v3.0 | 2015/08/04 |
io.js v2.5 | 2015/07/28 |
io.js v2.4 | 2015/07/17 |
io.js v2.3 | 2015/06/13 |
io.js v2.2 | 2015/06/01 |
io.js v2.1 | 2015/05/24 |
io.js v2.0 | 2015/05/04 |
io.js v1.8 | 2015/04/21 |
io.js v1.7 | 2015/04/17 |
io.js v1.6 | 2015/03/20 |
io.js v1.5 | 2015/03/06 |
io.js v1.4 | 2015/02/27 |
io.js v1.3 | 2015/02/20 |
io.js v1.2 | 2015/02/11 |
io.js v1.1 | 2015/02/03 |
io.js v1.0 | 2015/01/14 |
v0.12 | 2016/02/09 |
v0.11 | 2013/03/28 |
v0.10 | 2013/03/11 |
v0.9 | 2012-07-20 |
v0.8 | 2012-06-22 |
v0.7 | 2012-01-17 |
v0.6 | 2011-11-04 |
v0.5 | 2011-08-26 |
v0.4 | 2011-08-26 |
v0.3 | 2011-08-26 |
v0.2 | 2011-08-26 |
v0.1 | 2011-08-26 |
Ciao server World HTTP
Innanzitutto, installa Node.js per la tua piattaforma.
In questo esempio creeremo un server HTTP in ascolto sulla porta 1337, che invia Hello, World!
al browser. Si noti che, invece di utilizzare la porta 1337, è possibile utilizzare qualsiasi numero di porta a scelta che al momento non è utilizzato da nessun altro servizio.
Il modulo http
è un modulo core Node.js (un modulo incluso nell'origine di Node.js, che non richiede l'installazione di risorse aggiuntive). Il modulo http
fornisce la funzionalità per creare un server HTTP utilizzando il metodo http.createServer()
. Per creare l'applicazione, creare un file contenente il seguente codice JavaScript.
const http = require('http'); // Loads the http module
http.createServer((request, response) => {
// 1. Tell the browser everything is OK (Status code 200), and the data is in plain text
response.writeHead(200, {
'Content-Type': 'text/plain'
});
// 2. Write the announced text to the body of the page
response.write('Hello, World!\n');
// 3. Tell the server that all of the response headers and body have been sent
response.end();
}).listen(1337); // 4. Tells the server what port to be on
Salva il file con qualsiasi nome di file. In questo caso, se lo hello.js
possiamo eseguire l'applicazione andando nella directory in cui si trova il file e usando il seguente comando:
node hello.js
È possibile accedere al server creato con l'URL http: // localhost: 1337 o http://127.0.0.1:1337 nel browser.
Una pagina web semplice apparirà con un testo "Hello, World!" In alto, come mostrato nello screenshot qui sotto.
Ciao linea di comando mondiale
Node.js può anche essere utilizzato per creare utilità da riga di comando. L'esempio seguente legge il primo argomento dalla riga di comando e stampa un messaggio Hello.
Per eseguire questo codice su un sistema Unix:
- Crea un nuovo file e incolla il codice qui sotto. Il nome file è irrilevante.
- Rendi questo file eseguibile con
chmod 700 FILE_NAME
- Esegui l'app con
./APP_NAME David
Su Windows fai il passaggio 1 ed node APP_NAME David
con il node APP_NAME David
#!/usr/bin/env node
'use strict';
/*
The command line arguments are stored in the `process.argv` array,
which has the following structure:
[0] The path of the executable that started the Node.js process
[1] The path to this application
[2-n] the command line arguments
Example: [ '/bin/node', '/path/to/yourscript', 'arg1', 'arg2', ... ]
src: https://nodejs.org/api/process.html#process_process_argv
*/
// Store the first argument as username.
var username = process.argv[2];
// Check if the username hasn't been provided.
if (!username) {
// Extract the filename
var appName = process.argv[1].split(require('path').sep).pop();
// Give the user an example on how to use the app.
console.error('Missing argument! Example: %s YOUR_NAME', appName);
// Exit the app (success: 0, error: 1).
// An error will stop the execution chain. For example:
// ./app.js && ls -> won't execute ls
// ./app.js David && ls -> will execute ls
process.exit(1);
}
// Print the message to the console.
console.log('Hello %s!', username);
Installazione ed esecuzione di Node.js
Per iniziare, installa Node.js sul tuo computer di sviluppo.
Windows: vai alla pagina di download e scarica / esegui il programma di installazione.
Mac: vai alla pagina di download e scarica / esegui il programma di installazione. In alternativa, è possibile installare il nodo tramite Homebrew utilizzando il brew install node
. Homebrew è un pacchetto di comandi a riga di comando per Macintosh, e ulteriori informazioni a riguardo sono disponibili sul sito Web di Homebrew .
Linux: seguire le istruzioni per la distro sulla pagina di installazione della riga di comando .
Esecuzione di un programma di nodo
Per eseguire un programma Node.js, esegui semplicemente il node app.js
o nodejs app.js
, dove app.js
è il nome file del tuo codice sorgente dell'app nodo. Non è necessario includere il suffisso .js
per il nodo per trovare lo script che desideri eseguire.
In alternativa, con i sistemi operativi basati su UNIX, un programma Node può essere eseguito come uno script terminale. Per fare ciò, è necessario iniziare con uno shebang che punta all'interprete Node, come #!/usr/bin/env node
. Il file deve anche essere impostato come eseguibile, che può essere fatto usando chmod
. Ora lo script può essere eseguito direttamente dalla riga di comando.
Distribuzione dell'applicazione online
Quando si distribuisce l'app in un ambiente ospitato (specifico per Node.js), in genere questo ambiente offre una variabile di ambiente PORT
che è possibile utilizzare per eseguire il server. La modifica del numero di porta in process.env.PORT
consente di accedere all'applicazione.
Per esempio,
http.createServer(function(request, response) {
// your server code
}).listen(process.env.PORT);
Inoltre, se desideri accedere a questo offline durante il debug, puoi utilizzare questo:
http.createServer(function(request, response) {
// your server code
}).listen(process.env.PORT || 3000);
dove 3000
è il numero di porta offline.
Debug della tua applicazione NodeJS
È possibile utilizzare il nodo-inspector. Esegui questo comando per installarlo tramite npm:
npm install -g node-inspector
Quindi puoi eseguire il debug dell'applicazione usando
node-debug app.js
Il repository Github può essere trovato qui: https://github.com/node-inspector/node-inspector
Debugging nativamente
Puoi anche eseguire il debug di node.js in modo nativo avviandolo in questo modo:
node debug your-script.js
Per interrompere il debugger esattamente in una riga di codice che desideri, usa questo:
debugger;
Per maggiori informazioni vedi qui .
In node.js 8 usa il seguente comando:
node --inspect-brk your-script.js
Quindi apri about://inspect
in una versione recente di Google Chrome e seleziona lo script del nodo per ottenere l'esperienza di debug di Chrome's DevTools.
Ciao mondo con Express
Nell'esempio seguente viene utilizzato Express per creare un server HTTP in ascolto sulla porta 3000, che risponde con "Hello, World!". Express è un framework web comunemente utilizzato che è utile per creare API HTTP.
Innanzitutto, crea una nuova cartella, ad esempio myApp
. Vai su myApp
e crea un nuovo file JavaScript contenente il seguente codice ( hello.js
per esempio). Quindi installare il modulo express usando npm install --save express
dalla riga di comando. Fare riferimento a questa documentazione per ulteriori informazioni su come installare i pacchetti .
// Import the top-level function of express
const express = require('express');
// Creates an Express application using the top-level function
const app = express();
// Define port number as 3000
const port = 3000;
// Routes HTTP GET requests to the specified path "/" with the specified callback function
app.get('/', function(request, response) {
response.send('Hello, World!');
});
// Make the app listen on port 3000
app.listen(port, function() {
console.log('Server listening on http://localhost:' + port);
});
Dalla riga di comando, eseguire il seguente comando:
node hello.js
Apri il browser e vai a http://localhost:3000
o http://127.0.0.1:3000
per vedere la risposta.
Per ulteriori informazioni sul framework Express, è possibile controllare la sezione Web Apps con Express
Hello World routing di base
Una volta compreso come creare un server HTTP con nodo, è importante capire come farlo "fare" le cose in base al percorso a cui un utente ha navigato. Questo fenomeno è chiamato "routing".
L'esempio più semplice di questo sarebbe verificare if (request.url === 'some/path/here')
, e quindi chiamare una funzione che risponde con un nuovo file.
Un esempio di questo può essere visto qui:
const http = require('http');
function index (request, response) {
response.writeHead(200);
response.end('Hello, World!');
}
http.createServer(function (request, response) {
if (request.url === '/') {
return index(request, response);
}
response.writeHead(404);
response.end(http.STATUS_CODES[404]);
}).listen(1337);
Se continui a definire le tue "rotte" come questa, però, finirai con una funzione di callback enorme, e non vogliamo un pasticcio gigante come quello, quindi vediamo se riusciamo a ripulire tutto.
Per prima cosa, memorizziamo tutti i nostri percorsi in un oggetto:
var routes = {
'/': function index (request, response) {
response.writeHead(200);
response.end('Hello, World!');
},
'/foo': function foo (request, response) {
response.writeHead(200);
response.end('You are now viewing "foo"');
}
}
Ora che abbiamo memorizzato 2 percorsi in un oggetto, ora possiamo controllarli nel nostro callback principale:
http.createServer(function (request, response) {
if (request.url in routes) {
return routes[request.url](request, response);
}
response.writeHead(404);
response.end(http.STATUS_CODES[404]);
}).listen(1337);
Ora ogni volta che provi a navigare nel tuo sito web, controllerà l'esistenza di quel percorso nei tuoi percorsi e chiamerà la rispettiva funzione. Se non viene trovata alcuna route, il server risponderà con un 404 (non trovato).
Ed ecco fatto: il routing con l'API di HTTP Server è molto semplice.
Socket TLS: server e client
Le uniche differenze principali tra questa e una normale connessione TCP sono la chiave privata e il certificato pubblico che dovrai impostare in un oggetto opzione.
Come creare una chiave e un certificato
Il primo passo in questo processo di sicurezza è la creazione di una chiave privata. E qual è questa chiave privata? Fondamentalmente, è un insieme di rumore casuale che viene utilizzato per crittografare le informazioni. In teoria, potresti creare una chiave e usarla per crittografare quello che vuoi. Ma è una buona pratica avere diverse chiavi per cose specifiche. Perché se qualcuno ruba la tua chiave privata, è come se qualcuno rubasse le chiavi della tua casa. Immagina se hai usato la stessa chiave per bloccare la tua auto, garage, ufficio, ecc.
openssl genrsa -out private-key.pem 1024
Una volta che abbiamo la nostra chiave privata, possiamo creare una CSR (richiesta di firma del certificato), che è la nostra richiesta di far firmare la chiave privata da un'autorità immaginaria. Questo è il motivo per cui devi inserire le informazioni relative alla tua azienda. Queste informazioni verranno visualizzate dall'autorità di firma e utilizzate per verificare l'utente. Nel nostro caso, non importa ciò che scrivi, dal momento che nel prossimo passaggio firmeremo noi stessi il nostro certificato.
openssl req -new -key private-key.pem -out csr.pem
Ora che abbiamo completato il nostro lavoro cartaceo, è tempo di fingere di essere un'autentica autorità firmataria.
openssl x509 -req -in csr.pem -signkey private-key.pem -out public-cert.pem
Ora che hai la chiave privata e il certificato pubblico, puoi stabilire una connessione sicura tra due app NodeJS. E, come puoi vedere nel codice di esempio, è un processo molto semplice.
Importante!
Dal momento che abbiamo creato noi stessi il certificato pubblico, in tutta onestà, il nostro certificato non ha valore, perché siamo nomini. Il server NodeJS non si fiderà di tale certificato per impostazione predefinita, ed è per questo motivo che è necessario dirlo per fidarsi effettivamente del nostro cert con la seguente opzione rejectUnauthorized: false. Molto importante : non impostare mai questa variabile su true in un ambiente di produzione.
TLS Socket Server
'use strict';
var tls = require('tls');
var fs = require('fs');
const PORT = 1337;
const HOST = '127.0.0.1'
var options = {
key: fs.readFileSync('private-key.pem'),
cert: fs.readFileSync('public-cert.pem')
};
var server = tls.createServer(options, function(socket) {
// Send a friendly message
socket.write("I am the server sending you a message.");
// Print the data that we received
socket.on('data', function(data) {
console.log('Received: %s [it is %d bytes long]',
data.toString().replace(/(\n)/gm,""),
data.length);
});
// Let us know when the transmission is over
socket.on('end', function() {
console.log('EOT (End Of Transmission)');
});
});
// Start listening on a specific port and address
server.listen(PORT, HOST, function() {
console.log("I'm listening at %s, on port %s", HOST, PORT);
});
// When an error occurs, show it.
server.on('error', function(error) {
console.error(error);
// Close the connection after the error occurred.
server.destroy();
});
TLS Socket Client
'use strict';
var tls = require('tls');
var fs = require('fs');
const PORT = 1337;
const HOST = '127.0.0.1'
// Pass the certs to the server and let it know to process even unauthorized certs.
var options = {
key: fs.readFileSync('private-key.pem'),
cert: fs.readFileSync('public-cert.pem'),
rejectUnauthorized: false
};
var client = tls.connect(PORT, HOST, options, function() {
// Check if the authorization worked
if (client.authorized) {
console.log("Connection authorized by a Certificate Authority.");
} else {
console.log("Connection not authorized: " + client.authorizationError)
}
// Send a friendly message
client.write("I am the client sending you a message.");
});
client.on("data", function(data) {
console.log('Received: %s [it is %d bytes long]',
data.toString().replace(/(\n)/gm,""),
data.length);
// Close the connection after receiving the message
client.end();
});
client.on('close', function() {
console.log("Connection closed");
});
// When an error ocoures, show it.
client.on('error', function(error) {
console.error(error);
// Close the connection after the error occurred.
client.destroy();
});
Ciao mondo nella REPL
Quando chiamato senza argomenti, Node.js avvia un REPL (Read-Eval-Print-Loop) noto anche come " Node shell ".
Al prompt dei comandi digitare node
.
$ node
>
Al prompt della shell Nodo >
tipo "Ciao Mondo!"
$ node
> "Hello World!"
'Hello World!'
Moduli core
Node.js è un motore Javascript (motore V8 di Google per Chrome, scritto in C ++) che consente di eseguire Javascript all'esterno del browser. Mentre numerose librerie sono disponibili per estendere le funzionalità di Node, il motore viene fornito con una serie di moduli principali che implementano funzionalità di base.
Ci sono attualmente 34 moduli principali inclusi nel nodo:
[ 'assert',
'buffer',
'c/c++_addons',
'child_process',
'cluster',
'console',
'crypto',
'deprecated_apis',
'dns',
'domain',
'Events',
'fs',
'http',
'https',
'module',
'net',
'os',
'path',
'punycode',
'querystring',
'readline',
'repl',
'stream',
'string_decoder',
'timers',
'tls_(ssl)',
'tracing',
'tty',
'dgram',
'url',
'util',
'v8',
'vm',
'zlib' ]
Questo elenco è stato ottenuto dall'API di documentazione del nodo https://nodejs.org/api/all.html (file JSON: https://nodejs.org/api/all.json ).
Tutti i moduli di base a colpo d'occhio
affermare
Il modulo assert
fornisce una semplice serie di test di asserzione che possono essere utilizzati per testare gli invarianti.
buffer
Prima dell'introduzione di TypedArray
in ECMAScript 2015 (ES6), il linguaggio JavaScript non aveva alcun meccanismo per leggere o manipolare flussi di dati binari. La classe Buffer
è stata introdotta come parte dell'API Node.js per rendere possibile l'interazione con i flussi di ottetti nel contesto di operazioni come flussi TCP e operazioni del file system.
Ora che TypedArray
è stato aggiunto in ES6, la classe Buffer
implementa l'API Uin t8Array
in un modo più ottimizzato e adatto ai casi d'uso di Node.js.
C / C ++ _ addons
I componenti aggiuntivi di Node.js sono oggetti condivisi collegati dinamicamente, scritti in C o C ++, che possono essere caricati in Node.js usando la funzione require()
e usati come se fossero un normale modulo Node.js. Vengono utilizzati principalmente per fornire un'interfaccia tra JavaScript in esecuzione nelle librerie Node.js e C / C ++.
child_process
Il modulo child_process
fornisce la possibilità di generare processi figlio in un modo simile, ma non identico, a popen (3).
Una singola istanza di Node.js viene eseguita in un singolo thread. Per sfruttare i sistemi multi-core, l'utente a volte desidera avviare un cluster di processi Node.js per gestire il carico. Il modulo cluster consente di creare facilmente processi figlio che condividono tutte le porte del server.
consolle
Il modulo console
fornisce una semplice console di debug che è simile al meccanismo della console JavaScript fornito dai browser web.
crypto
Il modulo crypto
fornisce funzionalità crittografiche che include un set di wrapper per le funzioni di hash, HMAC, cifratura, decifratura, firma e verifica di OpenSSL.
deprecated_apis
Node.js può deprecare API quando: (a) l'utilizzo dell'API è considerato non sicuro, (b) è stata resa disponibile un'API alternativa migliorata oppure (c) sono previste interruzioni delle modifiche all'API in una futura versione principale .
dns
Il modulo dns
contiene funzioni appartenenti a due diverse categorie:
- Funzioni che utilizzano le funzionalità del sistema operativo sottostante per eseguire la risoluzione dei nomi e che non eseguono necessariamente alcuna comunicazione di rete. Questa categoria contiene solo una funzione:
dns.lookup()
. - Funzioni che si connettono a un server DNS effettivo per eseguire la risoluzione dei nomi e che utilizzano sempre la rete per eseguire query DNS. Questa categoria contiene tutte le funzioni nel modulo
dns
trannedns.lookup()
.
dominio
Questo modulo è in attesa di deprecazione . Una volta completata l'API di sostituzione, questo modulo sarà completamente deprecato. La maggior parte degli utenti non dovrebbe avere motivo di usare questo modulo. Gli utenti che devono assolutamente disporre delle funzionalità fornite dai domini possono affidarsi al momento, ma in futuro dovrebbero aspettarsi di dover eseguire la migrazione a una soluzione diversa.
Gran parte dell'API core di Node.js è basata su un'architettura asincrona basata sugli eventi asincrona in cui determinati tipi di oggetti (chiamati "emettitori") emettono periodicamente eventi denominati che causano la chiamata di oggetti Function ("listener").
fs
I / O di file sono forniti da semplici wrapper attorno alle funzioni POSIX standard. Per utilizzare questo modulo è require('fs')
. Tutti i metodi hanno forme asincrone e sincrone.
Le interfacce HTTP in Node.js sono progettate per supportare molte funzionalità del protocollo che sono state tradizionalmente difficili da utilizzare. In particolare, messaggi di grandi dimensioni, possibilmente codificati per il chunk. L'interfaccia fa attenzione a non bufferizzare intere richieste o risposte - l'utente è in grado di trasmettere dati.
https
HTTPS è il protocollo HTTP su TLS / SSL. In Node.js questo è implementato come un modulo separato.
modulo
Node.js ha un semplice sistema di caricamento dei moduli. In Node.js, i file e i moduli sono in corrispondenza uno a uno (ogni file viene trattato come un modulo separato).
netto
Il modulo net
fornisce un wrapper di rete asincrono. Contiene funzioni per la creazione di server e client (chiamati flussi). Puoi includere questo modulo con require('net');
.
os
Il modulo os
fornisce numerosi metodi di utilità relativi al sistema operativo.
sentiero
Il modulo path
fornisce utility per lavorare con i percorsi di file e directory.
Punycode
La versione del modulo punycode in bundle in Node.js è deprecata .
stringa della domanda
Il modulo querystring
fornisce utility per l'analisi e la formattazione delle stringhe di query URL.
Il modulo readline
fornisce un'interfaccia per leggere i dati da un flusso leggibile (come process.stdin
) una riga alla volta.
repl
Il modulo repl
fornisce un'implementazione Read-Eval-Print-Loop (REPL) che è disponibile sia come programma standalone che includibile in altre applicazioni.
Un flusso è un'interfaccia astratta per lavorare con i dati di streaming in Node.js. Il modulo stream
fornisce un'API di base che semplifica la creazione di oggetti che implementano l'interfaccia di streaming.
Esistono molti oggetti di flusso forniti da Node.js. Ad esempio, una richiesta a un server HTTP e process.stdout
sono entrambe istanze di flusso.
string_decoder
Il modulo string_decoder
fornisce un'API per decodificare gli oggetti Buffer
in stringhe in modo da preservare i caratteri codificati UTF-8 e UTF-16 codificati.
temporizzatori
Il modulo timer
espone un'API globale per le funzioni di pianificazione da richiamare in un determinato periodo di tempo. Poiché le funzioni del timer sono globali, non è necessario chiamare require('timers')
per utilizzare l'API.
Le funzioni del timer all'interno di Node.js implementano un'API simile all'API dei timer fornita dai browser Web, ma utilizzano un'implementazione interna diversa costruita attorno al Loop eventi di Node.js.
tls_ (SSL)
Il modulo tls
fornisce un'implementazione dei protocolli Transport Layer Security (TLS) e Secure Socket Layer (SSL) costruiti su OpenSSL.
tracciato
Trace Event fornisce un meccanismo per centralizzare le informazioni di traccia generate da V8, nucleo del nodo e codice dello spazio utente.
La traccia può essere abilitata passando il --trace-events-enabled
all'avvio di un'applicazione Node.js.
tty
Il modulo tty
fornisce le classi tty.ReadStream
e tty.WriteStream
. Nella maggior parte dei casi, non sarà necessario o possibile utilizzare direttamente questo modulo.
dgram
Il modulo dgram
fornisce un'implementazione di socket UDP Datagram.
url
Il modulo url
fornisce utility per la risoluzione e l'analisi dell'URL.
util
Il modulo util
è progettato principalmente per supportare le esigenze delle API interne di Node.js. Tuttavia, molte delle utilità sono utili anche per gli sviluppatori di applicazioni e moduli.
v8
Il modulo v8
espone le API specifiche per la versione di V8 integrata nel binario Node.js.
Nota : le API e l'implementazione sono soggette a modifiche in qualsiasi momento.
vm
Il modulo vm
fornisce API per la compilazione e l'esecuzione del codice all'interno dei contesti della macchina virtuale V8. Il codice JavaScript può essere compilato ed eseguito immediatamente o compilato, salvato ed eseguito successivamente.
Nota : il modulo vm non è un meccanismo di sicurezza. Non usarlo per eseguire codice non affidabile .
zlib
Il modulo zlib
fornisce funzionalità di compressione implementate usando Gzip e Deflate / Inflate.
Come ottenere un server Web HTTPS di base attivo e funzionante!
Una volta che node.js è installato sul tuo sistema, puoi semplicemente seguire la procedura seguente per ottenere un server Web di base in esecuzione con supporto per HTTP e HTTPS!
Passaggio 1: creare un'autorità di certificazione
creare la cartella in cui si desidera memorizzare la chiave e il certificato:
mkdir conf
vai a quella directory:
cd conf
prendi questo file
ca.cnf
da usare come scorciatoia di configurazione:wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/ca.cnf
creare una nuova autorità di certificazione utilizzando questa configurazione:
openssl req -new -x509 -days 9999 -config ca.cnf -keyout ca-key.pem -out ca-cert.pem
ora che abbiamo la nostra autorità di certificazione in
ca-key.pem
eca-cert.pem
,ca-key.pem
una chiave privata per il server:openssl genrsa -out key.pem 4096
prendi questo file
server.cnf
da usare come scorciatoia di configurazione:wget https://raw.githubusercontent.com/anders94/https-authorized-clients/master/keys/server.cnf
generare la richiesta di firma del certificato utilizzando questa configurazione:
openssl req -new -config server.cnf -key key.pem -out csr.pem
firmare la richiesta:
openssl x509 -req -extfile server.cnf -days 999 -passin "pass:password" -in csr.pem -CA ca-cert.pem -CAkey ca-key.pem -CAcreateserial -out cert.pem
Passaggio 2: installa il certificato come certificato di origine
copia il tuo certificato nella cartella dei certificati di root:
sudo cp ca-crt.pem /usr/local/share/ca-certificates/ca-crt.pem
aggiornare l'archivio di CA:
sudo update-ca-certificates
Passaggio 3: avvio del server nodo
Innanzitutto, si desidera creare un file server.js
che contenga il proprio codice server attuale.
L'installazione minima per un server HTTPS in Node.js sarebbe qualcosa del genere:
var https = require('https');
var fs = require('fs');
var httpsOptions = {
key: fs.readFileSync('path/to/server-key.pem'),
cert: fs.readFileSync('path/to/server-crt.pem')
};
var app = function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}
https.createServer(httpsOptions, app).listen(4433);
Se vuoi anche supportare le richieste http, devi fare solo questa piccola modifica:
var http = require('http');
var https = require('https');
var fs = require('fs');
var httpsOptions = {
key: fs.readFileSync('path/to/server-key.pem'),
cert: fs.readFileSync('path/to/server-crt.pem')
};
var app = function (req, res) {
res.writeHead(200);
res.end("hello world\n");
}
http.createServer(app).listen(8888);
https.createServer(httpsOptions, app).listen(4433);
vai alla directory in cui si trova il tuo
server.js
:cd /path/to
eseguire
server.js
:node server.js