Come creare la tua prima applicazione NestJS

Photo by Sereja Ris on Unsplash

Che cos’è NestJS?

NestJS è un framework per lo sviluppo rapido di applicazioni backend la cui struttura, fortemente ispirata a quella di Angular, lo rende perfetto per la realizzazione di progetti con stack MEAN.

Quando utilizzare NestJS?

Nest è particolarmente indicato per lo sviluppo di applicazioni che gestiscono un’enorme quantità di richieste con una piccolissima quantità di dati elaborati lato server e tempi di risposta istantanei (e-commerce, live chat, ecc ..).

Perché usare NestJS?

I vantaggi nell’utilizzo di NestJS sono innumerevoli. I più importanti (imho) che voglio evidenziare sono:

  • Type checking: con il Typescript sfruttiamo tutta la potenza del javascript senza incorrere nei problemi di tipizzazione.
  • Modulare: tramite la suddivisione in moduli possiamo isolare i nostri componenti in base al domain boundary.
  • Dependency Injection: grazie al container DI siamo in grado di scrivere codice disaccoppiato e testabile.
  • Adapters: Nest integra al suo interno tutte le librerie javascript/typescript più utilizzate e testate dalla community e fornisce agli sviluppatori tutti gli strumenti necessari per poter contribuire alla raccolta.
  • Angular Like: la struttura familiare ci permette di passare facilmente da frontend a backend senza dover cambiare l’approccio di sviluppo ad ogni iterazione.
  • CLI: possiamo sviluppare le nostre funzionalità senza doverci preoccupare del boilerplate iniziale

Cominciamo a scrivere codice

  • recuperare la lista di tutti i todo
  • recuperare un todo singolo
  • inserire un todo
  • modificare un todo
  • eliminare un todo
  • [GET] todos
  • [GET] todos/{id}
  • [POST] todos
  • [PUT] todos/{id}
  • [DELETE] todos/{id}
Ehm 😅

step 0: Setup

Configuriamo il nostro progetto con due semplici comandi da terminale:

npm i -g @nestjs/cli
nest new TodoBackend
NestJS bootstrap logs

step 1: Module

I moduli sono il meccanismo che ci permette di separare i nostri componenti in base a un dominio di appartenenza e, nell’atto pratico, di istruire il container DI sulle loro interazioni nella fase di bootstrap.

  • Non è un caso tipico e di conseguenza difficilmente applicabile in un contesto reale.
  • Non saremmo disaccoppiati, perdendo quindi in manutenibilità e in portabilità del nostro codice.
nest generate module todo

step 2: Entity

Una entity è una classe che mappa una tabella (o collezione) del nostro database (definizione molto pragmatica).

nest generate class todo/entities/Todo --no-spec

step 3: Repository

Adesso che abbiamo la nostra entity non ci resta che persisterla attraverso un ORM!

npm i @nestjs/typeorm typeorm sqlite3

step 4: DTO

Per evitare di esporre le nostre entities al di fuori del nostro business logic layer, definiamo un set di oggetti che verranno utilizzati per gestire la comunicazione in entrata e in uscita dai nostri servizi: i DTO (Data Transfer Object).

step 5: Service

Il service è il “pacchetto” dove andremo a incapsulare la nostra logica di business, esponendo un set di funzionalità pronte all’utilizzo.

nest generate service todo/services/todo
nest generate service todo/services/TodoMapper

step 6: Controller

Eccoci arrivati all’ultimo layer della nostra scalata allo stack di NestJS! Per creare il nostro controller utilizzeremo per l’ultima volta la nostra utilissima CLI con questo comando:

nest generate controller todo/controllers/todo
@Post()
@UseInterceptors(ClassSerializerInterceptor)
public add(@Body() todo: AddTodoDto): Promise<TodoDto> {

step 7: Validation

I nostri DTO sono pronti per viaggiare spediti come macchine di formula 1 all’interno del protocollo http ma manca un ultimo pezzo: la validazione dei suoi dati.

npm i class-transformer class-validator

step 8: Run!

È arrivato finalmente il momento di eseguire la nostra applicazione! 🎉

npm run start
npm run start:debug

step 9: Enable CORS

Dopo aver sviluppato il nostro backend, molto probabilmente vorremo sviluppare una applicazione frontend e provare a contattarlo, qui entra in gioco il CORS:

step 10: Test

I test sono assolutamente necessari quando si desidera realizzare un’applicazione manutenibile: ci prevengono dai più comuni errori di sviluppo e dalle possibili regressioni dovute alla modifica di una funzionalità esistente.

Conclusioni

Realizzando l’applicazione descritta in questo articolo ho potuto constatare in prima persona quanto sia veloce e potente questo framework: ti permette di essere estremamente rapido e flessibile senza dover rinunciare assolutamente a nulla. NestJS passa a pieni voti gli esami e può occupare meritatamente il suo posto nella top list dei framework per lo sviluppo web.

--

--

Fullstack Developer | Based in Florence | https://github.com/KernelPanic92 | https://iacopociao.com

Love podcasts or audiobooks? Learn on the go with our new app.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store