Express.js è il framework backend per Node.js più popolare e fa parte dell’ecosistema JavaScript.

È stato progettato per costruire applicazioni web a pagina singola, multipagina e ibride, ma è anche diventato lo standard per lo sviluppo di applicazioni backend con Node.js ed è la parte backend del cosiddetto stack MEVN.

Lo stack MEVN è un software JavaScript gratuito e open-source per la creazione di siti web dinamici e applicazioni web che comprende i seguenti componenti:

  1. MongoDB: MongoDB è il database NoSQL standard
  2. Express.js: il framework predefinito per la creazione di applicazioni web
  3. Vue.js: il framework progressivo in JavaScript utilizzato per la creazione di applicazioni web front-end
  4. Node.js: Motore JavaScript utilizzato per applicazioni scalabili lato server e di rete.

In questa guida scopriremo le caratteristiche principali del framework Express.js e come creare la prima applicazione.

Cos’è Express.js?

Express.js, a volte chiamato anche “Express”, è un framework di backend Node.js minimalista, veloce e simile a Sinatra che offre funzionalità e strumenti solidi per lo sviluppo di applicazioni di backend scalabili. Offre un sistema di routing e funzioni semplificate per estendere il framework sviluppando componenti e parti più potenti in base ai casi d’uso dell’applicazione.

Logo ufficiale di Express.js
Logo ufficiale di Express.js

Il framework fornisce una serie di strumenti per applicazioni web, le richieste e le risposte HTTP, il routing e il middleware per la creazione e la distribuzione di applicazioni su larga scala e di livello aziendale.

Fornisce inoltre uno strumento di interfaccia a riga di comando (CLI) chiamato Node Package Manager (NPM), da cui gli sviluppatori possono reperire i pacchetti sviluppati. Inoltre, obbliga gli sviluppatori a seguire il principio Don’t Repeat Yourself (DRY).

Il principio DRY mira a ridurre la ripetizione dei pattern del software, sostituendoli con astrazioni o utilizzando la normalizzazione dei dati per evitare la ridondanza.

Per Cosa Viene Utilizzato Express.js?

Express.js viene utilizzato per un’ampia gamma di scopi nell’ecosistema JavaScript/Node.js: con Express.js è possibile sviluppare applicazioni, endpoint API, sistemi di routing e framework.

Di seguito elenchiamo solo alcuni dei tipi di applicazioni che si possono realizzare con Express.js.

Applicazioni a Pagina Singola

Le applicazioni a pagina singola (SPA) costituiscono l’approccio moderno allo sviluppo di applicazioni in cui l’intera applicazione viene indirizzata in un’unica pagina indice. Express.js è un framework eccellente per creare un’API da collegare a queste applicazioni SPA e servire i dati in modo coerente. Alcuni esempi di applicazioni a pagina singola sono Gmail, Google Maps, Airbnb, Netflix, Pinterest, Paypal e molti altri. Le aziende utilizzano le SPA per creare un’esperienza fluida e scalabile.

Strumenti di Collaborazione in Tempo Reale

Gli strumenti di collaborazione semplificano il modo in cui le aziende lavorano e collaborano quotidianamente e con Express.js è possibile sviluppare facilmente applicazioni di collaborazione e networking in tempo reale.

Inoltre, il framework viene utilizzato per sviluppare applicazioni real time come le applicazioni di chat e dashboard, dove diventa semplice integrare WebSocket nel framework.

Express.js gestisce la parte di routing e middleware del processo, consentendo agli sviluppatori di concentrarsi sulla logica di business vitale per queste funzionalità in tempo reale quando si sviluppano strumenti di collaborazione dal vivo.

Applicazioni di Streaming

Le applicazioni di Streaming in tempo reale come Netflix sono complesse e presentano molti livelli di flussi di dati. Per sviluppare un’applicazione di questo tipo, è necessario un framework solido che gestisca in modo efficiente i flussi di dati asincroni.

È il framework ideale per costruire e distribuire applicazioni di streaming scalabili e pronte per le aziende.

Applicazioni Fintech

Il termine Fintech indica un programma informatico e altre tecnologie utilizzate per supportare o abilitare servizi bancari e finanziari. La creazione di applicazioni fintech è attualmente la tendenza del settore ed Express.js è il framework preferito per la creazione di applicazioni fintech altamente scalabili.

Se state pensando di sviluppare e distribuire un’applicazione fintech con un alto numero di utenti e di transazioni utilizzando Express.js, allora sarete in compagnia di aziende come Paypal e Capital One.

Perché Usare Express.js

Ci sono diversi motivi per cui prendere in considerazione Express.js per il vostro prossimo progetto: da un I/O più veloce per richieste e risposte più rapide, al suo sistema single-thread e ai processi asincroni. Inoltre, utilizza la struttura MVC per semplificare la manipolazione dei dati e i sistemi di routing.

Diamo un’occhiata più da vicino ad alcuni dei principali motivi per cui considerare l’utilizzo di Express.js.

Flessibile e veloce

Express.js è molto facile da usare, è flessibile ed è più veloce di qualsiasi altro framework Node.js. Essendo un framework minimalista, permette uno sviluppo rapido delle applicazioni e allevia lo stress di dover padroneggiare le diverse parti di un framework più grande. Inoltre, offre funzionalità ricche come un eccellente sistema di routing, middleware e negoziazione dei contenuti.

Parte dello stack MEAN

Express.js è il framework preferito in ogni stack rappresentato con la E, come MERN, MEAN e così via. Inoltre, può essere facilmente integrato in qualsiasi stack o tecnologia per dimostrare quanto il framework sia fondamentale nel processo di sviluppo dello stack MEAN.

Inoltre, è in grado di connettersi in modo efficiente con un sistema di gestione dei database più robusto del tradizionale MySQL e permette di creare un processo di sviluppo ininterrotto in ogni stack. Questa combinazione di caratteristiche rende Express.js molto popolare tra gli sviluppatori MEAN.

Scalabilità

Nel corso degli anni, Express.js ha dimostrato di essere molto scalabile grazie al numero di grandi aziende che utilizzano quotidianamente il framework sui loro server.

Gestisce le richieste e le risposte degli utenti in modo efficiente e non richiede alcuna configurazione aggiuntiva quando si sviluppa un’applicazione web su larga scala.

Dispone di ottimi moduli, pacchetti e risorse aggiuntive che aiutano gli sviluppatori a creare applicazioni web affidabili e scalabili.

Supportato da Google V8 Engine

Express.js supporta molti pacchetti del motore V8 di Google, e questo lo rende un framework molto potente per la creazione e la distribuzione di applicazioni in tempo reale, collaborative e basate su network a livello enterprise.

Il motore V8 di Google è un motore JavaScript e WebAssembly open-source ad alte prestazioni che supporta un’elevata velocità e scalabilità per applicazioni complesse e intense. L’uso di pacchetti che utilizzano il motore V8 di Google offre un enorme aumento delle prestazioni e della scalabilità delle applicazioni backend.

Supporto della Community

Essendo il framework di backend Node.js più popolare, ha il maggior supporto e moltissime risorse e pacchetti messi a disposizione dalla community per qualsiasi problema di sviluppo. Anche il supporto di Google è notevole, il che rende il framework popolare tra gli sviluppatori Node.js. Essendo open-source, offre agli sviluppatori l’opportunità di creare pacchetti e risorse estendibili per facilitare lo sviluppo, non solo per sé stessi, ma anche per tutti gli altri utenti che utilizzano Express.js.

Potente Sistema di Routing

Il framework dispone del più potente e robusto sistema di routing che assiste l’applicazione in risposta a una richiesta del client attraverso un particolare endpoint.

Grazie al sistema di routing di Express.js, è possibile suddividere il sistema di routing più voluminoso in file gestibili utilizzando l’istanza del router del framework.

Il sistema di routing di Express.js è utile per gestire la struttura dell’applicazione, raggruppando i diversi percorsi in un’unica cartella/directory.

Gli sviluppatori creano codice che può essere mantenuto più facilmente raggruppando le funzionalità con il router Express ed evitando le ripetizioni.

Middleware

Express.js è un framework che comprende una serie di middleware che permettono di creare un processo di sviluppo fluido e ininterrotto.

I middleware sono codici che vengono eseguiti prima che una richiesta HTTP raggiunga il gestore del percorso o prima che un cliente riceva una risposta, dando al framework la possibilità di eseguire uno script tipico prima o dopo la richiesta del client.

Con i middleware, gli sviluppatori possono inserire degli script per intercettare il flusso dell’applicazione; ad esempio, gli sviluppatori possono usare i middleware per verificare se un utente è entrato o uscito con successo.

Come funziona Express.js

Dato che Express.js utilizza il modello client-server per accettare le richieste degli utenti e inviare le risposte al client, il suo funzionamento non è molto diverso da quello di altri framework popolari, come Laravel.

Quando un utente invia una richiesta dal proprio browser web digitando l’indirizzo di un sito, il browser invia una richiesta HTTP all’applicazione/server (molte applicazioni create con Express.js sono ospitate da qualche parte nel cloud).

Il server riceve la richiesta attraverso uno dei suoi percorsi e la elabora utilizzando il controller che corrisponde al percorso richiesto.

Dopo l’elaborazione, il server invierà una risposta al client utilizzando il protocollo HTTP, poiché si tratta di un protocollo di comunicazione “back-and-forth”.

La risposta restituita al client può essere un testo standard, una pagina HTML dinamica che il browser elaborerà e visualizzerà in una bella pagina web, oppure dati JSON che gli sviluppatori del frontend gestiranno per visualizzare le informazioni sulla pagina web.

Ora creiamo un semplice server che ascolti le richieste in arrivo da uno specifico URL e numero di porta con Express.js:

const express = require('express')
const app = express()
const port = 4000

app.get('/', (request, response) => {
  response.send('Testing Hello World!')
})

app.listen(port, () => {
  console.log(`Test app listening at http://localhost:${port}`)
})

Questo è un semplice server Express.js che ascolterà le richieste in arrivo su http://localhost:4000/ e restituirà una risposta testuale del tipo “Testing Hello World!“.

Come Creare un’Applicazione Express.js

Ora creiamo un’applicazione demo reale utilizzando il nuovo Express.js 5.0. Per iniziare, create una cartella per la vostra nuova applicazione e installate i seguenti pacchetti:

mkdir first-express-app
cd first-express-app

npm install [email protected] --save

Quindi, create un file index.js nella directory principale e incollateci dentro quanto segue:

touch index.js

Dopo aver configurato il server come visto in precedenza, creeremo un array Todos che contiene tutti i nostri todos da restituire all’utente a seconda dell’endpoint chiamato. Aggiungete il seguente codice al file index.js:

const express = require("express");
const app = express();
const port = 3000;
app.listen(port, () => {
  console.log(`Test app listening at http://localhost:${port}`)
})
const todos = [
  {
    title: "Todo 1",
    desc: "This is my first Todo",
    completed: true,
  },
  {
    title: "Todo 2",
    desc: "This is my second Todo",
    completed: true,
  },

  {
    title: "Todo 3",
    desc: "This is my third Todo",
    completed: true,
  },

  {
    title: "Todo 4",
    desc: "This is my fourth Todo",
    completed: true,
  },

  {
    title: "Todo 5",
    desc: "This is my fifth Todo",
    completed: true,
  },
];
// Data source ends here

Successivamente, creeremo un endpoint per recuperare tutti i Todos memorizzati nel nostro server:

app.get("/todos", (request, response) => {
  response.status(200).json(todos);
});

Quindi, un endpoint per recuperare un singolo todo in base all’ID del todo:

app.get("/todos/:id", (request, response) => {
  response
    .status(200)
    .json({ data: todos.find((todo) => todo.id === request.params.id) });
});

Ora, un endpoint per memorizzare un nuovo todo:

app.post("/todos", (request, response) => {
  todos.push(request.body);
  response.status(201).json({ msg: "Todo created successfully" });
});

Poi, un endpoint per aggiornare un todo esistente con il ID:

app.put("/todos/:id", (request, response) => {
  const todo = todos.find((todo) => todo.id === request.params.id);
  if (todo) {
    const { title, desc, completed } = request.body;
    todo.title = title;
    todo.desc = desc;
    todo.completed = completed;
    response.status(200).json({ msg: "Todo updated successfully" });
    return;
  }
  response.status(404).json({ msg: "Todo not found" });
});

Infine, creeremo un endpoint per cancellare un singolo todo in base all’ID:

app.delete("/todos/:id", (request, response) => {
  const todoIndex = todos.findIndex((todo) => (todo.id = request.params.id));
  if (todoIndex) {
    todos.splice(todoIndex, 1);
    response.status(200).json({ msg: "Todo deleted successfully" });
  }
  response.status(404).json({ msg: "Todo not found" });
});

Questo frammento di codice mostra come implementare la funzionalità DELETE in Express.js. Raccoglie l’ID del Todo attraverso i parametri, cerca nell’array l’ID corrispondente e lo elimina.

Testare l’Applicazione Express.js

Ora è il momento di testare la nostra nuova applicazione Express.js!

Eseguite il seguente comando per testare l’API REST appena sviluppata con Postman e controllate di avere i dati giusti:

node index.js

Potete scaricare Postman dal sito ufficiale ed eseguire il test qui sotto. Per saperne di più, suggeriamo di creare altre funzionalità seguendo l’approccio che abbiamo descritto nell’articolo e di ampliare le conoscenze di Express.js

Risultato API Express.js
Risultato API Express.js

Riepilogo

Express.js è il framework più popolare dell’ecosistema Node.js e non è difficile capire perché. Offre un’ampia gamma di vantaggi e funzionalità di cui potrete beneficiare.

La curva di apprendimento ridotta di Express.js lo rende molto semplice. Astrae le funzionalità inutili o indesiderate delle applicazioni web e fornisce un sottile strato di funzionalità di base che lo rendono particolarmente flessibile.

Inoltre, dato che il framework Express.js è alla base di Node.js, conoscere Express.js permette di avere automaticamente una buona conoscenza di altri framework popolari. Questa conoscenza può aiutarvi a prendere decisioni fondamentali sulla costruzione della logica aziendale, su quale framework utilizzare oltre a Express.js e su quando utilizzare i pacchetti predefiniti o quelli dell’utente.

Quali sono i vostri prossimi progetti con Express.js? Scrivetecelo nella sezione commenti.