Applications autonomes
Il existe plusieurs façons de monter une application Nest. Vous pouvez créer une application web, un microservice ou simplement une application Nest autonome (sans aucun écouteur réseau). L’application Nest autonome est un wrapper autour du conteneur IoC de Nest, qui contient toutes les classes instanciées. Nous pouvons obtenir une référence à toute instance existante depuis n’importe quel module importé directement en utilisant l’objet de l’application autonome. Ainsi, vous pouvez tirer parti du cadre Nest n’importe où, y compris, par exemple, dans des tâches CRON scriptées. Vous pouvez même construire un CLI dessus.
Pour commencer
Pour créer une application Nest autonome, utilisez la construction suivante :
async function bootstrap() { const app = await NestFactory.createApplicationContext(AppModule); // votre logique d'application ici ...}bootstrap();
Récupération des fournisseurs à partir de modules statiques
L’objet de l’application autonome vous permet d’obtenir une référence à toute instance enregistrée dans l’application Nest. Imaginons que nous avons un fournisseur TasksService
dans le module TasksModule
qui a été importé par notre module AppModule
. Cette classe propose un ensemble de méthodes que nous souhaitons appeler depuis une tâche CRON.
const tasksService = app.get(TasksService);
Pour accéder à l’instance TasksService
, nous utilisons la méthode get()
. La méthode get()
agit comme une requête qui recherche une instance dans chaque module enregistré. Vous pouvez lui passer le token de n’importe quel fournisseur. Alternativement, pour un contrôle strict du contexte, passez un objet d’options avec la propriété strict: true
. Avec cette option active, vous devez naviguer à travers des modules spécifiques pour obtenir une instance particulière depuis le contexte sélectionné.
const tasksService = app.select(TasksModule).get(TasksService, { strict: true });
Voici un résumé des méthodes disponibles pour récupérer des références d’instance à partir de l’objet d’application autonome.
Méthode | Description |
---|---|
get() | Récupère une instance d’un contrôleur ou d’un fournisseur (y compris les gardes, les filtres, etc.) disponible dans le contexte de l’application. |
select() | Navigue à travers le graphe du module pour extraire une instance spécifique du module sélectionné (utilisé avec le mode strict comme décrit ci-dessus). |
Récupération des fournisseurs à partir de modules dynamiques
Lorsqu’il s’agit de modules dynamiques, nous devons fournir le même objet qui représente le module dynamique enregistré dans l’application à app.select
. Par exemple :
export const dynamicConfigModule = ConfigModule.register({ folder: './config'});
@Module({ imports: [dynamicConfigModule],})export class AppModule {}
Ensuite, vous pouvez sélectionner ce module plus tard :
const configService = app.select(dynamicConfigModule).get(ConfigService, { strict: true });
Phase de terminaison
Si vous souhaitez que l’application Node se ferme après la fin du script (par exemple, pour un script exécutant des tâches CRON), vous devez appeler la méthode app.close()
à la fin de votre fonction bootstrap
comme ceci :
async function bootstrap() { const app = await NestFactory.createApplicationContext(AppModule); // logique d'application ... await app.close();}
Et comme mentionné dans le chapitre Événements de cycle de vie, cela déclenchera les hooks de cycle de vie.
Exemple
Un exemple fonctionnel est disponible ici.