03-02-2025Ongeveer 2 minutenOngeveer 371 woorden
Begrip: protectedServerFunction & publicServerFunction
De protectedServerFunction en publicServerAction functies, die aangeboden wordt door de backend-docenten, zijn functies die alle gemeenschappelijke logica voor een server functie afzonderen.
De parameters van deze functie zijn dezelfde als voor de formAction functie, maar het returntype is anders:
type ServerFunction<Schema extends ZodType> = (data: z.infer<Schema>) => Promise<void>Deze functie controleren de ingestuurde data met een Zod schema, geven eventuele foutmeldingen terug, voeren een opgegeven functie met backend code uit en logt dit proces. Voor de protected variant wordt ook gecontroleerd of de gebruiker ingelogd is en eventueel of deze de juiste rol heeft.
De serverFunction functies hebben één parameter object met volgende properties:
schema: Een Zod schema dat de invoer valideert.serverFn: Een functie die een void teruggeeft en backend-code uitvoert. serverFn heeft één parameter object met volgende properties:data: De gevalideerde data.profile: Het profiel van de huidige gebruiker. Enkel beschikbaar in de protectedFormAction variant.logger: Een instantie van de Pino logger met requestId, userId, ...
globalErrorMessage: Een optionele foutboodschap die teruggegeven wordt in result.error.error in geval er zich een interne serverfout voordoet. Wordt standaard op 'Something went wrong, please ensure you are logged in and try again' gezet.functionName: Een optionele naam voor de functie die gebruikt wordt tijdens het loggen. Wordt standaard op 'Server function' gezet.requiredRoles: Een optionele array van de gebruikers rollen die toegang hebben tot de functie. Als de array niet meegegeven wordt, heeft elke gebruiker toegang. Enkel beschikbaar in de protectedFormAction variant.
// Een server function waarvoor de gebruiker INGELOGD moet zijn.
export const deleteFoo = protectedServerFunction({
schema: zodSchema,
serverFn: async ({data, profile}) => {
// Database operaties en andere backend logica.
},
functionName: 'Delete foo server function',
}
// Een action waarvoor de gebruiker INGELOGD moet zijn en de Admin rol moet hebben.
export const deleteFoo = protectedServerFunction({
schema: zodSchema,
serverFn: async ({data, profile}) => {
// Database operaties en andere backend logica.
},
functionName: 'Delete foo server function',
requiredRoles: [Role.Admin],
}
// Een action waarvoor de gebruiker NIET ingelogd moet zijn.
export const deleteFoo = = publicServerFunction({
schema: zodSchema,
serverFn: async ({data}) => {
// Database operaties en andere backend logica.
},
functionName: 'Delete foo server function',
}