Introduzione a Nest.js: più alto
Di Matthew Tyson
Architetto software, InfoWorld |
Da non confondere con Next.js, Nest.js è un approccio nuovo e unico alla tecnologia server JavaScript. Richiede un server familiare come Express o Fastify e si sovrappone a una serie di utili astrazioni, mirate a potenziare e semplificare la progettazione di applicazioni di livello superiore. Grazie alla sua miscela distintiva di paradigmi di programmazione, supporto TypeScript di primo ordine e funzionalità integrate come l'inserimento delle dipendenze, Nest.js è cresciuto costantemente in popolarità negli ultimi anni.
Nest.js è un contributo interessante all'ecosistema JavaScript e merita la tua attenzione. È un ottimo strumento da tenere a mente quando si lavora con JavaScript e TypeScript lato server.
In questo articolo faremo un rapido tour di Nest.js, con esempi che includono routing, controller, produttori (inserimento delle dipendenze) e autenticazione con guardie. Potrai anche comprendere il sistema dei moduli Nest.js.
Il nostro esempio è un'applicazione utilizzata per gestire un elenco di ricette di pasta. Includeremo un servizio con inserimento di dipendenze che gestisce il set di dati effettivo e un'API RESTful che possiamo utilizzare per elencare tutte le ricette o recuperare una singola ricetta per ID. Imposteremo anche un semplice endpoint PUT autenticato per aggiungere nuove ricette.
Cominciamo creando un'impalcatura per un nuovo progetto. Una volta ottenuto ciò, possiamo immergerci negli esempi.
Possiamo utilizzare l'interfaccia della riga di comando di Nest.js per impostare un layout rapido dell'applicazione, iniziando con l'installazione di Nest a livello globale con: $ npm install -g @nestjs/cli. Oltre al comando create, nestjs include funzionalità utili come la generazione per la condivisione di progetti riutilizzabili. L'installazione a livello globale ci dà accesso a questo e altro ancora.
Adesso possiamo creare una nuova applicazione con: $ nest new iw-nest. Puoi selezionare il gestore di pacchetti che desideri (npm, Yarn o pnpm). Per questa demo utilizzerò pnpm. Il processo è lo stesso a prescindere.
Passare alla nuova directory /iw-nest e avviare il server di sviluppo con: $ pnpm run start. Puoi verificare che l'applicazione sia in esecuzione visitando localhost:3000, dove dovresti vedere un messaggio "Hello, World!" Messaggio. Questo messaggio proviene da iw-nest/src/app.controller.ts. Se guardi quel file, puoi vedere che sta utilizzando un servizio iniettato. Creiamo un nuovo controller (src/recipes.controller.ts) che restituisce un elenco di ricette, come mostrato nel Listato 1.
Il Listato 1 ci offre uno sguardo alle nozioni di base del routing in Nest.js. Puoi vedere che utilizziamo l'annotazione @Controller('recipes') per definire la classe come controller con il percorso /recipes. Il metodo getRecipes() è annotato per gestire il metodo GET con @Get().
Per ora, questo controller associa semplicemente /recipes GET a una stringa di risposta codificata. Prima che Nest.js possa servire a questo scopo, dobbiamo registrare il nuovo controller con il modulo. I moduli sono un altro concetto importante in Nest, utilizzato per organizzare il codice dell'applicazione. Nel nostro caso, dobbiamo aprire /src/app.module.ts e aggiungere il controller, come mostrato nel Listato 2.
Il framework di iniezione delle dipendenze in Nest.js ricorda la primavera nell'ecosistema Java. Avere integrato l'iniezione delle dipendenze rende Nest.js degno di considerazione, anche senza gli altri fronzoli.
Definiremo un fornitore di servizi e lo collegheremo al nostro controller. Questo è un modo pulito per mantenere l'applicazione organizzata in livelli. Puoi vedere la nostra nuova classe di servizio, /src/recipes.service.ts, nel Listato 3.
Per utilizzare questo fornitore di servizi, dobbiamo anche aggiungerlo al file app.module.ts, come mostrato nel Listato 4.
I moduli sono un buon modo per organizzare un'applicazione. Possono agire come un meccanismo di raggruppamento logico, fornendo una struttura gerarchica in cui i moduli più fondamentali sono chiaramente definiti e gli altri dipendono da essi.
Ora possiamo utilizzare il servizio in RecipesController, come mostrato nel Listato 5. Se sei nuovo all'inserimento delle dipendenze, questo potrebbe sembrare molto lavoro extra. Ma la capacità di definire e utilizzare classi a livello di applicazione, in modo standardizzato, può rappresentare un vero vantaggio per l'architettura dell'applicazione man mano che il sistema cresce.