Node.js-Framework: Fastify 3.0 erweitert die Unterstützung für TypeScript

Neue Typdefinitionen, Support für die Express-Middleware und eine überarbeitete Validierung von Anfragen finden sich nun in Version 3.0 des Webframeworks.

Lesezeit: 2 Min.
In Pocket speichern
vorlesen Druckansicht Kommentare lesen 2 Beiträge

(Bild: Martin Mecnarowski/Shutterstock.com)

Von

Fastify, ein Webframework für Node.js, ist in der dritten Hauptversion erschienen. Das Major Release umfasst neue Typdefinitionen und eine überarbeitete Validierung von Anfragen. Das neue Release soll Long-Term Support (LTS) von mindestens sechs Monaten und insgesamt zwölf Monate lang Sicherheitsupdates durch das Kernteam erhalten.

Fastify 3 erhält mit generischem Constraining und Defaulting ein neues Typsystem. Auch eine neue Methode zum Definieren von Schematypen wie Request Body und Query-String hat das Entwicklerteam neu eingeführt. Der Aufruf per Kommandozeile funktioniert in der neuen Hauptversion mit folgendem Code:

server.get<{
Querystring: PingQuerystring;
Params: PingParams;
Headers: PingHeaders;
Body: PingBody;
}>('/ping/:bar', opts, async (request, reply) => {
console.log(request.query); // This is of type `PingQuerystring`
console.log(request.params); // This is of type `PingParams`
console.log(request.headers); // This is of type `PingHeaders`
console.log(request.body); // This is of type `PingBody`
});

Nutzer von Version 2.x können den TypeScript-Support wie folgt aufrufen:

interface PingQuerystring {
foo?: number;
}

interface PingParams {
bar?: string;
}

interface PingHeaders {
a?: string;
}

interface PingBody {
baz?: string;
}

server.get<PingQuerystring, PingParams, PingHeaders, PingBody>(
'/ping/:bar',
opts,
(request, reply) => {
console.log(request.query); // This is of type `PingQuerystring`
console.log(request.params); // This is of type `PingParams`
console.log(request.headers); // This is of type `PingHeaders`
console.log(request.body); // This is of type `PingBody`
}
);

Eine bemerkenswerte Änderung dürfte auch die neue Unterstützung des Middleware-Frameworks Express sein, die das Framework bislang nicht bereithielt. Nutzer, die in ihrer Anwendung Middleware einsetzen wollen, müssen vor der Verwendung die beiden Plug-ins fastify-express und middieinstallieren. In Version 3 geht das mit folgendem Code:

/ Using the Express `cors` middleware in Fastify v3.
await fastify.register(require('fastify-express'));
fastify.use(require('cors')());

Das Fastify-Team hat die für das Protokollieren zuständigen Serializer aktualisiert. Statt nativen Objekten enthalten sie nun request- und request-Fastify-Objekte. Laut Release Notes macht die Änderung eine Anpassung aller benutzerdefinierten Serializer erforderlich, die von den Eigenschaften request und reply auf nativen Objekten abhängig sind. Die Anpassung können Nutzer für Version 3 wie folgt vornehmen:

const fastify = require('fastify')({
logger: {
serializers: {
res(reply) {
return {
statusCode: reply.statusCode, // No change required
customProp: reply.raw.customProp // Log custom property from res object
};
}
}
}
});

Eine alternative Anleitung für Version 2 steht auf GitHub.

Hooks haben laut Anbieter nun einen konsistenten Kontext, und zwar unabhängig davon, auf welche Weise Entwickler sie registriert hatten, hier hat das Entwicklerteam die Optionen connectionTimeout und keepAliveTimeout ergänzt. Auch das Verhalten von Hooks hat sich offenbar gegenüber der Vorgängerversion von Fastify verändert: Die Hooks onRoute und onRegister unterstützen jetzt die Abkapselung (encapsulation) von Hooks. onRoute wird dabei asynchron aufgerufen und beim Registrieren eines neuen Plug-ins innerhalb desselben Encapsulation-Bereichs vererbt. Gleiches gilt für den Hook onRegister, mit dem kleinen Unterschied, dass den ersten Aufruf an diesen Hook (wie sein Name verrät) das registrierte Plug-in leistet. Aufrufe durch das Fastify-Framework sind bei diesem Hook nachrangig.

Eine Option mit der Bezeichnung set ValidatorCompiler hat die beiden Optionen setSchemaCompiler und setSchemaResolver ersetzt, und die irreguläre Unterstützung für gemeinsam genutzte Schemata durch replace-way entfällt zugunsten eines JSON-kompatiblen Ersatzes, der auf $ref beruht. Offenbar können Entwickler mit der neuen Version ein Throw-Objekt als Error-Feature einsetzen und für Plug-ins auch die Unterstützung von async-await nutzen.

Mehr Informationen lassen sich den Release Notes auf GitHub entnehmen, wo auch eine Anleitung zum Versionswechsel von Fastify 2.x zur neuen Hauptversion bereitsteht. Die letzte Hauptversion fällt voraussichtlich Anfang Januar 2021 aus dem Support.

(sih)