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.
- Silke Hahn
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.
Erweiterte Unterstützung für TypeScript
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`
}
);
Express Middleware lässt sich einbinden
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 middie
installieren. 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')());
Anpassung benutzerdefinierter Serializer von Hand
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.
Neuerungen bei Hooks und Optionen
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)