Aller au contenu principal

FAQ

Trouvez des réponses aux questions courantes concernant l'utilisation de la bibliothèque. Cliquez sur une question pour révéler la réponse.

1. Démarrage

Q : Qu'est-ce que le projet express-cargo ?

R : Il s'agit d'un middleware conçu pour automatiser le traitement répétitif et fastidieux des données de requête (req.body, req.query, etc.) dans Express.js en utilisant une approche basée sur les classes. En utilisant les décorateurs TypeScript, vous pouvez gérer la liaison et la validation des données de manière déclarative en un seul endroit.

Q : Y a-t-il des précautions pour l'installation ?

R : Node.js version 20 ou supérieure est recommandée. Elle est conçue pour être intégrée de manière flexible dans les projets Express existants en tant que middleware standard.

Q : La configuration TypeScript est-elle obligatoire ?

R : Oui. Puisqu'elle utilise des décorateurs, les deux options suivantes doivent être définies sur true dans votre tsconfig.json :

  • experimentalDecorators: true
  • emitDecoratorMetadata: true

De plus, le package reflect-metadata doit être installé pour lire les informations de type à l'exécution.

2. Liaison de données et décorateurs

Q : Quelle est la différence entre @Body et @Query ?

R : La différence réside dans la source de l'extraction des données :

  • @Body : Extrait les données du corps de la requête HTTP. Principalement utilisé pour les requêtes POST et PUT.
  • @Query : Extrait les paramètres de la chaîne de requête URL (par exemple, ?id=1&name=test). Principalement utilisé pour le filtrage ou le tri dans les requêtes GET.
  • Vous pouvez également lier diverses autres données de requête en utilisant @Params() (ou @Uri()), @Header() et @Session().
Q : Qu'est-ce que @Uri() ? Est-ce différent de @Params() ?

R : @Uri() est un alias pour @Params(). Vous pouvez choisir entre eux en fonction de votre préférence de lisibilité lors de la liaison des paramètres de chemin URL (par exemple, /:id).

Q : Comment récupérer les données liées ?

R : Après avoir passé le middleware bindingCargo(ClassName) dans votre routeur, vous pouvez récupérer l'instance dans le gestionnaire en appelant la fonction getCargo<ClassName>(req).

3. Validation et transformation

Q : Comment les échecs de validation sont-ils gérés ?

R : La validation est effectuée en interne en utilisant des décorateurs tels que @Min, @Max et @Length. Si des données invalides sont détectées, le middleware retourne automatiquement une réponse d'erreur ou lève une exception.

Q : Comment puis-je traiter ou transformer les valeurs de champ ?

R : Utilisez le décorateur @Transform(). Par exemple, écrire @Transform(v => v.trim()) vous permet de transformer les données d'entrée dans le format souhaité avant la liaison.

Q : Comment éviter les erreurs si un champ spécifique est manquant ?

R : Utilisez le décorateur @Optional(). Le champ sera lié avec succès même si la valeur est null ou undefined, en sautant la validation pour ce champ.

4. Compatibilité des frameworks

Q : Puis-je l'utiliser avec Fastify ou NestJS ?

R : Cette bibliothèque est spécifiquement conçue comme middleware exclusif pour Express.js.

  • NestJS : NestJS possède son propre ValidationPipe et ses décorateurs, qui peuvent chevaucher les fonctionnalités. Bien que techniquement possible si vous utilisez l'adaptateur Express, l'objectif principal de cette bibliothèque est d'améliorer l'expérience développeur dans les environnements Express purs.
  • Fastify : Actuellement non officiellement supporté.

5. Dépannage

Q : Pourquoi les données de mon instance de classe retournent-elles undefined ?

R : Veuillez vérifier les deux points suivants :

  • Un middleware d'analyse du corps comme express.json() est-il déclaré avant bindingCargo ?
  • reflect-metadata est-il importé tout en haut du point d'entrée de votre application ?
Q : La conversion de type automatique a-t-elle lieu ?

R : Oui. Elle tente de convertir automatiquement les valeurs en fonction des types définis dans les champs de classe (string, number, boolean, etc.). Par exemple, une chaîne "123" provenant de @Query() sera automatiquement convertie en nombre si le type du champ est défini comme number.

6. Divers

Q : Puis-je l'utiliser gratuitement dans des projets commerciaux ?

R : Cette bibliothèque est sous licence MIT. Vous êtes libre de l'utiliser, de la modifier et de la distribuer même à des fins commerciales sans restrictions.