Premiers pas
Dans cet ensemble d’articles, vous apprendrez les fondamentaux essentiels de Nest. Pour vous familiariser avec les éléments essentiels des applications Nest, nous construirons une application CRUD de base avec des fonctionnalités qui couvrent beaucoup de terrain à un niveau introductif.
Langage
Nous sommes fans de TypeScript, mais avant tout, nous aimons Node.js. C’est pourquoi Nest est compatible avec TypeScript et JavaScript pur. Nest tire parti des dernières fonctionnalités du langage, donc pour l’utiliser avec JavaScript pur, nous avons besoin d’un compilateur Babel.
Nous utiliserons principalement TypeScript dans les exemples que nous fournissons, mais vous pouvez toujours changer les extraits de code pour la syntaxe JavaScript vanille (il suffit de cliquer pour basculer le bouton de langue dans le coin supérieur droit de chaque extrait).
Prérequis
Veuillez vous assurer que Node.js (version >= 16) est installé sur votre système d’exploitation.
Configuration
Configurer un nouveau projet est assez simple avec le Nest CLI. Avec npm installé, vous pouvez créer un nouveau projet Nest avec les commandes suivantes dans le terminal de votre système d’exploitation :
$ npm i -g @nestjs/cli$ nest new project-name
Le répertoire project-name
sera créé, les modules Node et quelques autres fichiers de démarrage seront installés, et un répertoire src/
sera créé et peuplé de plusieurs fichiers essentiels.
Répertoiresrc
- app.controller.spec.ts
- app.controller.ts
- app.module.ts
- app.service.ts
- main.ts
Voici un aperçu rapide de ces fichiers essentiels :
Fichier | Description |
---|---|
app.controller.ts | Un contrôleur de base avec une seule route. |
app.controller.spec.ts | Les tests unitaires pour le contrôleur. |
app.module.ts | Le module racine de l’application. |
app.service.ts | Un service de base avec une seule méthode. |
main.ts | Le fichier d’entrée de l’application qui utilise la fonction principale NestFactory pour créer une instance d’application Nest. |
Le fichier main.ts
inclut une fonction asynchrone, qui va démarrer notre application :
import { NestFactory } from '@nestjs/core';import { AppModule } from './app.module';
async function bootstrap() { const app = await NestFactory.create(AppModule); await app.listen(3000);}bootstrap();
Pour créer une instance d’application Nest, nous utilisons la classe fondamentale NestFactory
. NestFactory
expose quelques méthodes statiques qui permettent de créer une instance d’application. La méthode create()
retourne un objet d’application, qui satisfait à l’interface INestApplication
. Cet objet fournit un ensemble de méthodes qui seront décrites dans les chapitres à venir. Dans l’exemple ci-dessus, nous démarrons simplement notre écouteur HTTP, ce qui permet à l’application d’attendre les requêtes HTTP entrantes.
Notez qu’un projet générationné avec le Nest CLI crée une structure de projet initiale qui encourage les développeurs à suivre la convention de garder chaque module dans son propre répertoire dédié.
Plateforme
Nest vise à être un framework indépendant de la plateforme. L’indépendance de la plateforme permet de créer des parties logiques réutilisables dont les développeurs peuvent tirer parti dans plusieurs types d’applications. Techniquement, Nest peut fonctionner avec n’importe quel framework HTTP Node une fois qu’un adaptateur est créé. Il y a deux plateformes HTTP prises en charge par défaut : express et fastify. Vous pouvez choisir celle qui correspond le mieux à vos besoins.
Package | Description |
---|---|
platform-express | Express est un framework web minimaliste bien connu pour Node. C’est une bibliothèque robuste et prête pour la production avec beaucoup de ressources mises en œuvre par la communauté. Le package @nestjs/platform-express est utilisé par défaut. Beaucoup d’utilisateurs sont bien servis avec Express et n’ont besoin d’aucune action pour l’activer. |
platform-fastify | Fastify est un framework de haute performance et à faible surcharge, très axé sur la fourniture de la maximum efficacité et rapidité. Lisez comment l’utiliser ici. |
Quelle que soit la plateforme utilisée, elle expose sa propre interface d’application. Celles-ci sont respectivement vues comme NestExpressApplication
et NestFastifyApplication
.
Lorsque vous passez un type à la méthode NestFactory.create()
, comme dans l’exemple ci-dessous, l’objet app
disposera de méthodes disponibles exclusivement pour cette plateforme spécifiquement. Notez cependant que vous n’avez pas besoin de spécifier un type à moins que vous ne souhaitiez réellement accéder à l’API de la plateforme sous-jacente.
const app = await NestFactory.create<NestExpressApplication>(AppModule);
Exécution de l’application
Une fois le processus d’installation terminé, vous pouvez exécuter la commande suivante à votre invite de commande OS pour commencer à écouter les requêtes HTTP entrantes :
$ npm run start
Cette commande démarre l’application avec le serveur HTTP écoutant sur le port défini dans le fichier src/main.ts
. Une fois l’application en cours d’exécution, ouvrez votre navigateur et accédez à http://localhost:3000/
. Vous devriez voir le message Hello World!
.
Pour suivre les modifications dans vos fichiers, vous pouvez exécuter la commande suivante pour démarrer l’application :
$ npm run start:dev
Cette commande surveillera vos fichiers, recompilant et rechargeant automatiquement le serveur.
Linting et formatage
Le CLI fournit le meilleur effort pour structurer un workflow de développement fiable à grande échelle. Ainsi, un projet Nest généré vient avec à la fois un linter et un formatteur préinstallés (respectivement eslint et prettier).
Pour garantir une stabilité et une extensibilité maximales, nous utilisons les packages CLI de base eslint et prettier. Cette configuration permet une intégration nette de l’IDE avec des extensions officielles par design.
Pour les environnements sans interface utilisateur où un IDE n’est pas pertinent (Intégration Continue, hooks Git, etc.), un projet Nest est livré avec des scripts npm
prêts à l’emploi.
# Lint et correction automatique avec eslint$ npm run lint
# Formatage avec prettier$ npm run format