Gestire un’applicazione su larga scala può essere un compito noioso, soprattutto se fatto senza una struttura ben pianificata e una rigorosa strategia di organizzazione del codice. Si rischia di fare un disastro durante la manutenzione, e lo si deve evitare a tutti i costi, soprattutto tenendo conto che i colpevoli di un eventuale disastro sarebbero le modifiche apportate alla base di codice e alle nuove funzionalità man mano che cresce la base di utenti del progetto.

Nest.js è stato costruito per offrire soluzioni ai problemi di struttura e di strategia di organizzazione del codice. Combina approcci moderni e modulari ai principi dell’ingegneria del software.

Nest.js utilizza TypeScript per il type-checking e fornisce un’architettura software pronta all’uso per la creazione e la distribuzione di applicazioni testabili, scalabili, liberamente accoppiate e facilmente manutenibili.

In questo articolo scopriremo tutto su Nest.js e cosa è possibile costruirci. Spiegheremo anche i pro e i contro del framework per darvi un quadro chiaro del perché le aziende lo preferiscono ad altri framework Node.js. E prima di concludere, vi mostreremo come creare una to-do API con Nest.js.

Cos’è Nest.js?

Nest.js è uno dei framework Node.js in più rapida crescita per la creazione di applicazioni backend efficienti, scalabili e di livello enterprise con Node.js. È noto per la capacità di produrre applicazioni altamente testabili, manutenibili e scalabili utilizzando i moderni JavaScript e TypeScript.

Nest.js logo
Il logo ufficiale di Nest.js. (Fonte immagine: Behance)

Con oltre 46,6k stelle e 5,4k fork su GitHub e un numero di download settimanali che raggiunge le 700.000 unità, questo framework è uno dei più popolari per la creazione di progetti backend con Node.js.

Nest.js è la soluzione perfetta per il vostro prossimo progetto se avete bisogno di costruire un’applicazione scalabile, manutenibile e di livello enterprise.

Nella prossima sezione scopriremo per cosa viene utilizzato e quali sono le aziende che utilizzano questo framework in produzione.

A Cosa Serve Nest.js?

Nest.js è un framework Node.js lato server ottimo per la creazione di applicazioni backend altamente testabili e manutenibili. Con Node.js è possibile creare innumerevoli tipi di applicazioni; il limite dipende solo dalle caratteristiche delle vostre applicazioni.

Dato che il framework sfrutta TypeScript, Nest.js è particolarmente apprezzato dai team che vogliono sfruttare la potenza del type-checking di TypeScript. Inoltre, è semplice da imparare e da padroneggiare, con una potente CLI che aumenta la produttività e la facilità di sviluppo. Questa potente CLI rende semplice avviare qualsiasi progetto lato server e portarlo a termine.

Inoltre, Nest.js dispone di una documentazione dettagliata e la sua comunità di sviluppatori e collaboratori è molto attiva e pronta a rispondere a qualsiasi domanda al volo.

Per questi motivi è facile capire perché molte aziende stanno cambiando framework a favore di Nest.js. Ecco qui di seguito un elenco dei marchi più famosi che utilizzano il framework in produzione.

Roche

Roche è una multinazionale del settore sanitario che opera in due divisioni, quella farmaceutica e quella diagnostica. Questa azienda americana di biotecnologie utilizza il framework Nest.js sul suo sito web principale per soddisfare in modo affidabile i propri pazienti e per espandere ulteriormente i propri servizi.

La homepage ufficiale di Roche.
La homepage ufficiale di Roche.

Adidas

Adidas è il più grande produttore di abbigliamento sportivo in Europa e il secondo al mondo. Adidas è nota per la progettazione e la produzione di scarpe, abbigliamento e accessori. La sua portata globale e la sua popolarità sono il motivo per cui ha deciso di utilizzare il framework altamente scalabile Nest.js per costruire applicazioni efficienti e su larga scala per il suo marchio.

La homepage ufficiale di Adidas.
La homepage ufficiale di Adidas.

Decathlon

Decathlon è un rivenditore di articoli sportivi con oltre 1.500 negozi in 57 paesi. Decathlon ha scelto Nest.js come backend per la sua applicazione web per aiutarla a scalare e a mantenere la sua base di codice legacy.

La homepage ufficiale di Decathlon.
La homepage ufficiale di Decathlon.

È possibile trovare un elenco di altre aziende, progetti e strumenti realizzati con Nest.js su GitHub.

A seguire spiegheremo perché voi e la vostra azienda dovreste scegliere Nest.js per il vostro prossimo progetto e vi spiegheremo perché altri utilizzano già questo framework e i suoi vantaggi.

Perché Scegliere Nest.js

La scelta di un framework dipende dal tipo di applicazione che si sta sviluppando, perché applicazioni diverse richiedono strumenti diversi.

Qui elencheremo diversi motivi per scegliere Nest.js come framework Node.js per l’aggiornamento o la realizzazione del vostro prossimo progetto.

  • Nest.js è facile da imparare e da padroneggiare, soprattutto per gli sviluppatori che provengono dal mondo Angular. Ciò consente un processo di sviluppo rapido ed efficiente, in quanto i membri del team possono adattarsi facilmente a qualsiasi nuovo principio e struttura di sviluppo.
  • Il framework è noto per avere un’ottima struttura architettonica per le applicazioni aziendali, il che rende la creazione di applicazioni aziendali altamente scalabili e manutenibili un gioco da ragazzi.
  • Con Nest.js si possono creare facilmente servizi di backend che vanno da API RESTful, applicazioni GraphQL, applicazioni MVC, Web socket, CLI e Cron job. Alcune architetture standard sono già integrate nel framework di Nest.js.
  • Poiché Nest.js utilizza tecnologie moderne come TypeScript, modelli architettonici a prova di bomba, un’eccellente documentazione e test unitari semplici, si possono costruire applicazioni scalabili e manutenibili di livello enterprise.
  • Nest.js è stato creato per la creazione di applicazioni monolite e microservizi su larga scala in cui l’architettura è già stata gestita e resta solo da costruire la propria logica di business.
  • Nest.js supporta e mette a disposizione un’ampia comunità di moduli supportati da Nest per realizzare qualsiasi funzionalità specifica di vostra scelta, da concetti come TypeORM, Mongoose e GraphQL a log, validazione, caching, WebSockets e molto altro ancora.

Esploreremo adesso i pro e i contro di Nest.js. Ne discuteremo sia i lati positivi che quelli negativi, per aiutarvi a decidere se adottare il framework o meno.

Pro e Contro di Nest.js

Di seguito elencheremo i pro e i contro di Nest.js per capire meglio perché è un framework così popolare nell’ecosistema Node.js.

I Pro

Alcuni dei vantaggi dell’utilizzo di Nest.js sono:

  • Potente ma facile da usare: il framework è facile da usare per gli sviluppatori, tanto che anche le funzioni più complesse e potenti sono semplici da usare. Il team di Nest.js ha progettato il framework in modo che gli sviluppatori possano iniziare rapidamente a lavorare e concentrarsi esclusivamente sulla scrittura della logica aziendale, mentre il framework si occupa di altri aspetti importanti dello sviluppo, come la sicurezza.
  • Sintassi in stile Angular (backend): Angular è un framework frontend molto popolare che si concentra sull’architettura e sulla strutturazione. Nest.js agisce come Angular per il backend perché utilizza lo stile e la sintassi di Angular per aiutarvi a strutturare il vostro progetto aziendale.
  • TypeScript: Nest.js supporta TypeScript fin dall’inizio e questo risolve il problema delle prestazioni e della scrittura di applicazioni manutenibili in modo rapido, fornendo errori di compilazione e avvisi. TypeScript è ben integrato in VSCode per un ambiente di sviluppo accessibile.
  • Documentazione accurata: Nest.js offre una delle migliori documentazioni per qualsiasi framework, molto facile da capire. Si risparmia tempo per il debugging dando una rapida occhiata alla documentazione e trovando la soluzione al problema.
  • Buona architettura e sviluppo veloce: Nest.js vi fa risparmiare tempo durante la creazione della vostra applicazione, sia che stiate creando il vostro primo MVP o l’applicazione vera e propria, perché offre una struttura e un’architettura solida con cui lavorare fin dall’inizio, migliorando così i processi di sviluppo.

I Contro

Come sappiamo, ogni vantaggio ha i suoi svantaggi, e Nest.js non fa eccezione. Quindi, analizziamo i contro di Nest.js.

  • Difficile per i principianti: Nest.js può essere un po’ difficile da imparare per gli sviluppatori alle prime armi che non provengono da un background Angular. Inoltre, poiché non tutti gli sviluppatori JavaScript utilizzano TypeScript, il framework può risultare difficile anche per quest’ultimo gruppo di sviluppatori. Ma proprio come ogni altra tecnologia, richiede solo tempo e pratica.
  • Debug difficile: Per quanto TypeScript abbia i suoi vantaggi e benefici, comporta anche molti problemi di debugging, soprattutto per gli sviluppatori che si avvicinano per la prima volta al mondo di TypeScript.

Ecco i pro e i contro di Nest.js e come possono influenzare la vostra decisione di sceglierlo come framework di riferimento.

Successivamente, ci eserciteremo a costruire un’API RESTful con Nest.js per consolidare quanto appreso finora. Continuate a leggere per scoprire come sviluppare un’API che permetta agli utenti di creare e gestire le loro liste di cose da fare.

Creare la Prima API RESTful di Nest.js

È arrivato il momento di mettere in pratica tutto ciò che abbiamo imparato su Nest.js costruendo la nostra prima API RESTful per dimostrare la potenza e la semplicità che ne derivano.

Inizieremo configurando il framework e installando tutti gli strumenti necessari per renderlo operativo.

1. Configurazione di Nest.js

Per prima cosa, installiamo la Nest CLI per creare nuovi progetti con questo comando:

npm i -g @nestjs/cli

Dopodiché, creeremo un nuovo progetto con questo comando:

nest new nest-todo-api
cd nest-todo-api
npm run start:dev

Ora che abbiamo installato la Nest CLI e che il nostro nuovo progetto è stato creato con successo, costruiamo la nostra API.

Aprite il progetto in un editor di codice a vostra scelta. Visitando localhost:3000, dovreste essere accolti da un messaggio di benvenuto che mostra che tutto funziona correttamente.

Successivamente, imposteremo un database MongoDB per connetterci e gestire i dati delle nostre attività in tutto il progetto.

Prima di tuffarci, generiamo tutti i file di cui avremo bisogno per creare l’API con i seguenti comandi:

nest generate module todos
nest generate controller todos
nest generate service todos

2. Configurare MongoDB

Successivamente, installeremo e configureremo MongoDB per lavorare con il progetto che abbiamo creato in precedenza.

Dopo aver installato MongoDB sul vostro computer locale, eseguite il seguente comando per installare la libreria Mongoose nel nostro progetto appena creato:

npm install --save @nestjs/mongoose mongoose

Questo è tutto ciò che dovete fare.

Genereremo poi i file e importeremo Mongoose per comunicare con il progetto e MongoDB.

Importiamo Mongoose nel file del modulo dell’applicazione prima di generare gli altri file necessari:

import { Module } from '@nestjs/common';
import { AppController } from './app.controller';
import { AppService } from './app.service';
import { MongooseModule } from '@nestjs/mongoose';
import { TodosModule } from './todos/todos.module';

@Module({
  imports: [MongooseModule.forRoot('mongodb://localhost/todos), TodosModule],
  controllers: [AppController],
  providers: [AppService],
})
export class AppModule {}

3. Creare lo schema

Successivamente, creeremo lo schema del nostro database. Questo schema specificherà come verranno rappresentati i dati nel nostro database.

Definiamolo nel nostro file todos.schema.ts:

import * as mongoose from 'mongoose';
export const ItemSchema = new mongoose.Schema({
  title: String,
  is_completed: Boolean,
  description: String,
});

4. Definire le Interfacce

Adesso, creiamo un’interfaccia per il type-checking.

Definiamola nel nostro file interfaces/todo.interface.ts:

import { Document } from 'mongoose';
export interface Item extends Document {
  id?: string;
  title: string;
  description?: string;
  is_completed: boolean;
}

5. Creare il DTO

Infine, creeremo un DTO (Data Transfer Object) che definisce il modo in cui i dati saranno inviati o passati da un oggetto all’altro attraverso la rete.

Si tratta di una classe di base con le stesse proprietà del nostro schema:

// ./dto/create-todo.ts
export class CreateItemDto {
  readonly title: string;
  readonly description: string;
  readonly is_completed: boolean;
}

6. Impostazione del Modello/Servizio

Il file di servizio è responsabile dell’interazione e della comunicazione con il database MongoDB. Viene utilizzato per creare, recuperare, aggiornare e cancellare i record dallo schema todos che abbiamo creato in precedenza.

Aprite il vostro file di servizio e aggiungete i seguenti codici:

import { Injectable } from '@nestjs/common';
import { Todo } from './interfaces/todo.interface';
import { Model } from 'mongoose';
import { InjectModel } from '@nestjs/mongoose';
import { CreateTodoDto } from './dto/create-todo.dto';

@Injectable()

export class ItemsService {
  constructor(@InjectModel('Todo') private readonly todoModel: Model) {}
  async findAll(): Promise<Todo[]> {
    return await this.todoModel.find();
  }
  async findOne(id: string): Promise {
    return await this.todoModel.findOne({ _id: id });
  }
  async create(item: CreateItemDto): Promise {
    const newTodo = new this.todoModel(item);
    return await newTodo.save();
  }
  async delete(id: string): Promise {
    return await this.todoModel.findByIdAndRemove(id);
  }
  async update(id: string, todo: CreateTodoDto): Promise {
    return await this.todoModel.findByIdAndUpdate(id, todo, { new: true });
  }
}

Il frammento di codice qui sopra rappresenta un’applicazione CRUD (creazione, lettura, aggiornamento, cancellazione) sulla nostra API che utilizza il modello Mongoose per fornire l’accesso al nostro database MongoDB sottostante.

Successivamente, creeremo il nostro file controller per gestire tutta la logica e comunicare con il servizio creato in precedenza.

7. Impostazione dei Controller

Il controller è responsabile della gestione delle richieste in entrata e dell’invio delle risposte al client.

Definiamo il nostro controller Todo e incolliamo il seguente frammento di codice:

import {
  Controller,
  Get,
  Post,
  Put,
  Delete,
  Body,
  Param,
} from '@nestjs/common';
import { CreateTodoDto } from './dto/create-todo.dto';
import { TodosService } from './todos.service';
import { Todo } from './interfaces/todo.interface';

@Controller('items')

export class ItemsController {
  constructor(private readonly todosService: TodosService) {}

  @Get()
  findAll(): Promise<Todo[]> {
    return this.todosService.findAll();
  }
  
  @Get(':id')
  findOne(@Param('id') id): Promise {
    return this.todosService.findOne(id);
  }
  
  @Post()
  create(@Body() createTodoDto: CreateTodoDto): Promise {
    return this.todosService.create(createTodoDto);
  }
  
  @Delete(':id')
  delete(@Param('id') id): Promise {
    return this.todosService.delete(id);
  }
  
  @Put(':id')
  update(@Body() updateTodoDto: CreateTodoDto, @Param('id') id): Promise {
    return this.todosService.update(id, updateTodoDto);
  }
}

Il framework utilizza le annotazioni per gestire molte funzionalità dietro le quinte – ad esempio, per gestire il sistema di routing del framework fornendo diverse annotazioni corrispondenti a ciascuna rotta (@Put(), @Delete(), @Post(), @Get()) per le API RESTful Put, Delete, Post e Get rispettivamente.

8. Testare l’API con Postman

Infine, testiamo la nostra API appena creata con Postman. Dobbiamo avviare il server di sviluppo per assicurarci che tutto funzioni correttamente prima di distribuirlo su un server di produzione.

npm run start:dev

Potete scaricare ed eseguire Postman per testare la vostra API RESTful.

Risultato dell'elenco di cose da fare Nest.js
Risultato dell’elenco di cose da fare Nest.js

Riepilogo

Nest.js è un potente framework Node.js e il più popolare framework typescript oggi disponibile.

Fornisce al team di ingegneri un’architettura di sviluppo standard e le migliori pratiche del settore. Grazie a questo framework, gli sviluppatori possono astrarre dai processi di progettazione ripetuti per concentrarsi esclusivamente sullo sviluppo della logica di business.

Questi vantaggi spingono marchi famosi come Adidas, Roche e altri a utilizzare questo framework per le loro applicazioni di produzione aziendale.

In questo articolo abbiamo gettato delle solide basi su Nest.js e sui motivi per cui voi e la vostra azienda dovreste prendere in considerazione il passaggio a questo framework. Inoltre, abbiamo costruito una semplice lista di cose da fare con RESTful per dimostrare concretamente la straordinarietà del framework.

Ora sta solamente a voi decidere se Nest.js è proprio il framework che fa per voi.