Begrip: protectedFormAction & publicFormAction
De protectedFormAction en publicFormAction functies, die aangeboden wordt door de backend-docenten, zijn functie die alle gemeenschappelijke logica voor een formAction afzonderen.
Deze functies converteren FormData naar een object (inclusief geneste properties en arrays), valideren de data vervolgens met een Zod schema en voeren tenslotte een opgegeven functie met backend-logica uit. Voor de protected variant wordt ook gecontroleerd of de gebruiker ingelogd is en eventueel of deze de juiste rol heeft. Tussen al deze stappen worden log statements toegevoegd.
Tijdens al deze acties worden eventuele foutmeldingen opgevangen en teruggegeven als {errors: {errors: ['...']}, submittedData: {...}} voor globale fouten of {errors: {field: ['...'],}} voor Zod-validatiefouten.
De functie geeft een nieuwe functie terug die onderstaande signatuur heeft:
(prevData: ServerFunctionResponse, formData: FormData): Promise<ServerFunctionResponse>Met andere woorden een functie die opgeroepen kan worden via de useActionState hook.
De formAction functies hebben één parameter object met volgende properties:
schema: Een Zod schema dat de invoer valideert.serverFn: Een functie die een ServerFunctionResponse object of void teruggeeft en backend-code uitvoert. Als serverFn een void functie is en geen fouten vertoond, geeft de formAction functie {success: true} terug. Als serverFn geen void functie is, wordt het resultaat van fn teruggegeven. 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 action waarvoor de gebruiker INGELOGD moet zijn.
export const createFoo = protectedFormAction({
schema: zodSchema,
serverFn: async ({data, profile}) => {
// Database operaties en andere backend logica.
},
functionName: 'Create foo action',
})
// Een action waarvoor de gebruiker INGELOGD moet zijn en de Admin rol moet hebben.
export const createFoo = protectedFormAction({
schema: zodSchema,
serverFn: async ({data, profile}) => {
// Database operaties en andere backend logica.
},
functionName: 'Create foo action',
requiredRoles: [Role.Admin],
})
// Een action waarvoor de gebruiker NIET ingelogd moet zijn.
export const createFoo = publicFormAction({
schema: zodSchema,
serverFn: async ({data}) => {
// Database operaties en andere backend logica.
},
functionName: 'Create foo action',
})