Elegant håndtering av tRPC-feil
Implementer anbefalte fremgangsmåter for å fange opp og svare på feil i tRPC-prosedyrer og mellomvare.
Elegant håndtering av tRPC-feil er en gratis leksjon i Typesikre API-er fra frontend til backend med tRPC på CoddyKit. Dette er leksjon 1 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Typesikre API-er fra frontend til backend med tRPC, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Typesikre API-er fra frontend til backend med tRPC inneholder totalt 4 leksjoner.
API-feil: Et nødvendig onde
I ethvert robust API er feil uunngåelige. Brukere kan sende ugyldige data, ressurser finnes kanskje ikke, eller eksterne tjenester kan svikte.
God feilhåndtering er avgjørende for å lage stabile og brukervennlige applikasjoner. Det gjør at API-et kan svare forutsigbart og informativt.
Slik håndterer tRPC feil
Som standard fanger tRPC automatisk opp JavaScript-feil som kastes i prosedyrer eller middleware-komponenter. Feilene serialiseres og sendes til klienten.
Generiske feil tilordnes ofte statusen INTERNAL_SERVER_ERROR (HTTP 500) på klientsiden hvis de ikke håndteres eksplisitt. Prøv å kjøre dette eksempelet for å se en generisk feil.
function fetchData(shouldFail: boolean) {
if (shouldFail) {
throw new Error("Something went wrong on the server!");
}
return "Data fetched successfully.";
}
function main() {
try {
console.log("Attempting to fetch (success):");
console.log(fetchData(false));
} catch (error: any) {
// This catch block demonstrates local error handling
// tRPC server would catch and serialize if not handled here
console.log(`Caught error: ${error.message}`);
}
try {
console.log("\nAttempting to fetch (fail):");
fetchData(true);
} catch (error: any) {
console.log(`Caught error: ${error.message}`);
}
}
main();Standardisere med TRPCError
For å gi strukturerte og forutsigbare feilsvar tilbyr tRPC klassen TRPCError. Dette er tRPCs dedikerte måte å utløse API-spesifikke feil på.
TRPCErrorlar deg angi encode(for eksempel en HTTP-status) og enmessagesom er lett å forstå.- Den sikrer konsistente feildata, slik at klienter lettere kan tolke og reagere på ulike feiltyper.
Oppbygningen av TRPCError
Når du oppretter en TRPCError, sender du inn et objekt med en code og en message. code samsvarer med standardiserte HTTP-statuskoder (for eksempel NOT_FOUND og UNAUTHORIZED).
Dette eksempelet viser hvordan du kan utløse ulike typer TRPCError basert på betingelser.
import { TRPCError } from '@trpc/server';
function simulateError(type: string) {
if (type === 'not_found') {
throw new TRPCError({
code: 'NOT_FOUND',
message: 'Resource does not exist.'
});
}
if (type === 'bad_input') {
throw new TRPCError({
code: 'BAD_REQUEST',
message: 'Invalid input provided.'
});
}
return 'No error was simulated.';
}
function main() {
try {
console.log("Simulating 'not_found' error:");
simulateError('not_found');
} catch (error: any) {
if (error instanceof TRPCError) {
console.log(`TRPC Error Code: ${error.code}`);
console.log(`TRPC Error Message: ${error.message}`);
} else {
console.log(`Generic Error: ${error.message}`);
}
}
}Håndtering av feil i prosedyrer
tRPC-prosedyrene dine inneholder den sentrale forretningslogikken. Det er god praksis å pakke inn operasjoner som kan mislykkes (for eksempel databasekall eller API-forespørsler) i try...catch-blokker.
Inne i catch-blokken kan du konvertere generelle feil til bestemte TRPCError-instanser og gi klienten tydelig informasjon.
Eksempel: Feilhåndtering i prosedyrer
Dette eksempelet simulerer en prosedyre som prøver å hente en bruker fra en database. Den håndterer både en manglende bruker og en feil ved databasetilkoblingen, og konverterer dem til passende typer TRPCError.
import { TRPCError } from '@trpc/server';
// Simulate a database call
function fetchUserFromDB(id: string) {
if (id === 'db_error') {
throw new Error("Database connection failed!");
}
if (id === '123') {
return { id: '123', name: 'Alice' };
}
return null;
}
// Simulate a tRPC query procedure
function getUserQuery(userId: string) {
try {
const user = fetchUserFromDB(userId);
if (!user) {
throw new TRPCError({
code: 'NOT_FOUND',
message: 'User not found.'
});
}
return user;
} catch (error: any) {
if (error instanceof TRPCError) {
throw error; // Re-throw tRPC errors directly
}
// Catch generic errors and convert them to TRPCError
throw new TRPCError({
code: 'INTERNAL_SERVER_ERROR',
message: `Failed to fetch user: ${error.message}`
});
}
}
function main() {
try {
console.log("Fetching user '123':");
console.log(getUserQuery('123'));
} catch (error: any) {
console.log(`Error: ${error.code} - ${error.message}`);
}
try {
console.log("\nFetching user 'db_error':");
getUserQuery('db_error');
} catch (error: any) {
console.log(`Error: ${error.code} - ${error.message}`);
}
}Feilhåndtering i middleware
tRPC-middlewarefunksjoner kjøres før prosedyrer. De egner seg godt til globale kontroller som autentisering, autorisasjon eller logging.
Hvis en middlewarefunksjon utløser en TRPCError, kjøres ikke prosedyren den beskytter, og feilen sendes umiddelbart videre til klienten. Dette er effektivt for å beskytte API-et ditt.
Eksempel: Autorisasjonsfeil i middleware
Denne middlewarefunksjonen kontrollerer om brukeren har rollen «admin». Hvis ikke, utløser den en UNAUTHORIZED-feil, slik at ingen etterfølgende prosedyre kjøres.
Dette sikrer at bare autoriserte brukere kan fortsette.
import { TRPCError } from '@trpc/server';
// Simulate a tRPC middleware logic
// In a real tRPC app, `ctx` would contain user info
function authMiddleware(userRole: string) {
if (userRole !== 'admin') {
throw new TRPCError({
code: 'UNAUTHORIZED',
message: 'You are not authorized to perform this action.'
});
}
return { success: true, message: 'Authorized' }; // Simulates `next()`
}
function main() {
console.log("Attempting with 'user' role:");
try {
authMiddleware('user');
} catch (error: any) {
if (error instanceof TRPCError) {
console.log(`Middleware Error: ${error.code} - ${error.message}`);
}
}
console.log("\nAttempting with 'admin' role:");
try {
authMiddleware('admin');
console.log("Middleware passed: User is an admin!");
} catch (error: any) {
console.log("This block should not be reached for admin.");
}
}
main();Videreføring av feil til klienten
Når tRPC-serveren din utløser en TRPCError, mottar tRPC-klienten et strukturert feilobjekt. Dette objektet inneholder vanligvis:
code: tRPC-feilkoden (for eksempel 'NOT_FOUND').message: Den beskrivende feilmeldingen.data: Ytterligere feildata, inkludert HTTP-statuskoden.
Dette gjør at frontend-delen kan reagere spesifikt på ulike feiltyper og dermed gi en bedre brukeropplevelse.
Kontroll av feilhåndtering
Tenk deg en tRPC-prosedyre som henter et blogginnlegg. Hvis brukeren som sender forespørselen, er autentisert, men ikke har nødvendige tillatelser til å vise det aktuelle innlegget, hvilken TRPCError-kode vil det være mest passende å utløse?
Oppsummering: Smidig feilhåndtering
Du har lært hvordan du håndterer feil på en god måte i tRPC!
- tRPC fanger automatisk opp generelle feil, men
TRPCErrorgir dem struktur. - Bruk
TRPCErrormed bestemtecode-verdier (for eksempelNOT_FOUNDogUNAUTHORIZED) og meldinger. - Implementer
try...catchi prosedyrer for å konvertere generelle feil tilTRPCError-feil. - Bruk middleware til å håndheve globale kontroller (for eksempel autentisering) ved å utløse
TRPCError-feil tidlig. - Klienter mottar strukturerte feilobjekter, noe som gir bedre feilhåndtering i frontend-delen.
Lær deg Typesikre API-er fra frontend til backend med tRPC med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 10
- Leksjoner
- 40
Ofte stilte spørsmål
Er leksjonen «Elegant håndtering av tRPC-feil» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Typesikre API-er fra frontend til backend med tRPC, inkludert «Elegant håndtering av tRPC-feil», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Typesikre API-er fra frontend til backend med tRPC inneholder totalt 4 leksjoner.
Hva lærer jeg i «Elegant håndtering av tRPC-feil»?
Implementer anbefalte fremgangsmåter for å fange opp og svare på feil i tRPC-prosedyrer og mellomvare. Du øver på Typesikre API-er fra frontend til backend med tRPC med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Typesikre API-er fra frontend til backend med tRPC?
Ingen tidligere erfaring er nødvendig. Typesikre API-er fra frontend til backend med tRPC på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 1 av 4.
Hvor lang tid tar leksjonen «Elegant håndtering av tRPC-feil»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Typesikre API-er fra frontend til backend med tRPC-leksjonen?
Ja. Alle Typesikre API-er fra frontend til backend med tRPC-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Elegant håndtering av tRPC-feil
- Egendefinerte feiltypper
- Datatransformatorer for serialisering
- Formatering av feil og valideringstilbakemeldinger på feltnivå