FAQs
Finden Sie Antworten auf häufig gestellte Fragen zur Verwendung der Bibliothek. Klicken Sie auf eine Frage, um die Antwort anzuzeigen.
1. Erste Schritte
F: Was ist das express-cargo-Projekt?
A: Es handelt sich um eine Middleware, die entwickelt wurde, um die wiederholte und mühsame Verarbeitung von Anfragedaten (req.body, req.query usw.) in Express.js mithilfe eines klassenbasierten Ansatzes zu automatisieren. Durch die Verwendung von TypeScript-Decorators können Sie die Datenbindung und -validierung deklarativ an einem Ort handhaben.
F: Gibt es Vorsichtsmaßnahmen bei der Installation?
A: Node.js Version 20 oder höher wird empfohlen. Es ist so konzipiert, dass es als Standard-Middleware flexibel in bestehende Express-Projekte integriert werden kann.
F: Ist die TypeScript-Konfiguration obligatorisch?
A: Ja. Da es Decorators verwendet, müssen die folgenden beiden Optionen in Ihrer tsconfig.json auf true gesetzt sein:
experimentalDecorators: trueemitDecoratorMetadata: true
Zusätzlich muss das reflect-metadata-Paket installiert sein, um Typinformationen zur Laufzeit lesen zu können.
2. Datenbindung & Decorators
F: Was ist der Unterschied zwischen @Body und @Query?
A: Der Unterschied liegt in der Quelle der Datenextraktion:
@Body: Extrahiert Daten aus dem HTTP-Anfrage-Body. Hauptsächlich fürPOST- undPUT-Anfragen verwendet.@Query: Extrahiert Parameter aus dem URL-Query-String (z. B.?id=1&name=test). Hauptsächlich zur Filterung oder Sortierung inGET-Anfragen verwendet.- Sie können auch verschiedene andere Anfragedaten mit
@Params()(oder@Uri()),@Header()und@Session()binden.
F: Was ist @Uri()? Unterscheidet es sich von @Params()?
A: @Uri() ist ein Alias für @Params(). Sie können je nach Lesbarkeitspräferenz zwischen ihnen wählen, wenn Sie URL-Pfadparameter binden (z. B. /:id).
F: Wie rufe ich die gebundenen Daten ab?
A: Nachdem Sie die bindingCargo(ClassName)-Middleware in Ihrem Router übergeben haben, können Sie die Instanz innerhalb des Handlers abrufen, indem Sie die Funktion getCargo<ClassName>(req) aufrufen.
3. Validierung & Transformation
F: Wie werden Validierungsfehler behandelt?
A: Die Validierung wird intern mit Decorators wie @Min, @Max und @Length durchgeführt. Wenn ungültige Daten erkannt werden, gibt die Middleware automatisch eine Fehlerantwort zurück oder löst eine Ausnahme aus.
F: Wie kann ich Feldwerte verarbeiten oder transformieren?
A: Verwenden Sie den @Transform()-Decorator. Zum Beispiel ermöglicht das Schreiben von @Transform(v => v.trim()) die Umwandlung von Eingabedaten in das gewünschte Format vor der Bindung.
F: Wie vermeide ich Fehler, wenn ein bestimmtes Feld fehlt?
A: Verwenden Sie den @Optional()-Decorator. Das Feld wird auch dann erfolgreich gebunden, wenn der Wert null oder undefined ist, und die Validierung für dieses Feld wird übersprungen.
4. Framework-Kompatibilität
F: Kann ich es mit Fastify oder NestJS verwenden?
A: Diese Bibliothek ist speziell als exklusive Middleware für Express.js konzipiert.
- NestJS: NestJS verfügt über eine eigene
ValidationPipeund Decorators, die sich in der Funktionalität überschneiden können. Obwohl es technisch möglich ist, wenn der Express-Adapter verwendet wird, besteht das Hauptziel dieser Bibliothek darin, die DX in reinen Express-Umgebungen zu verbessern. - Fastify: Derzeit nicht offiziell unterstützt.
5. Fehlerbehebung
F: Warum geben meine Klassensinstanzdaten undefined zurück?
A: Bitte überprüfen Sie die folgenden beiden Punkte:
- Ist eine Body-Parsing-Middleware wie
express.json()vorbindingCargodeklariert? - Wird
reflect-metadataganz oben im Einstiegspunkt Ihrer Anwendung importiert?
F: Erfolgt eine automatische Typkonvertierung?
A: Ja. Es wird versucht, Werte automatisch basierend auf den in den Klassenfeldern definierten Typen (string, number, boolean usw.) zu konvertieren. Beispielsweise wird ein String "123", der von @Query() kommt, automatisch in eine Zahl konvertiert, wenn der Feldtyp als number definiert ist.
6. Sonstiges
F: Kann ich es kostenlos in kommerziellen Projekten verwenden?
A: Diese Bibliothek ist unter der MIT-Lizenz lizenziert. Sie können sie auch für kommerzielle Zwecke ohne Einschränkungen frei verwenden, ändern und verteilen.