tRPC:n tyyppiturvalliset API:t päästä päähän · Oppitunti

tRPC-virheiden hallittu käsittely

Toteuttakaa parhaat käytännöt virheiden sieppaamiseen ja niihin vastaamiseen tRPC-proseduureissa ja -middlewaressa.

Oppitunti 1/411 vaihetta

tRPC-virheiden hallittu käsittely on ilmainen tRPC:n tyyppiturvalliset API:t päästä päähän-oppitunti CoddyKitissä. Tämä on oppitunti 1/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu tRPC:n tyyppiturvalliset API:t päästä päähän-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. tRPC:n tyyppiturvalliset API:t päästä päähän-kurssilla on yhteensä 4 oppituntia.

API-virheet: välttämätön paha

Kaikissa vankkarakenteisissa API-rajapinnoissa virheet ovat väistämättömiä. Käyttäjät voivat lähettää virheellisiä tietoja, resursseja ei ehkä ole olemassa tai ulkoiset palvelut voivat lakata toimimasta.

Hallittu virheenkäsittely on ratkaisevan tärkeää vakaiden ja käyttäjäystävällisten sovellusten luomisessa. Sen ansiosta API voi vastata ennakoitavasti ja informatiivisesti.

Miten tRPC käsittelee virheitä

Oletusarvoisesti tRPC sieppaa automaattisesti kaikki JavaScript-virheet, jotka heitetään proseduureissa tai middlewareissä. Se sarjallistaa virheet ja lähettää ne asiakkaalle.

Jos yleisiä virheitä ei käsitellä erikseen, ne muunnetaan asiakkaan puolella usein INTERNAL_SERVER_ERROR-tilaksi (HTTP 500). Suorittakaa tämä esimerkki nähdäksenne yleisen virheen.

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();

Virheiden yhdenmukaistaminen TRPCError-virheen avulla

Jäsenneltyjen ja ennakoitavien virhevastausten tarjoamiseksi tRPC tarjoaa TRPCError-luokan. Se on tRPC:n oma tapa heittää API-kohtaisia virheitä.

  • TRPCError antaa määrittää code-koodin (kuten HTTP-tilakoodin) ja ihmisen ymmärrettävissä olevan message-viestin.
  • Se varmistaa virhekuormien yhdenmukaisuuden, jolloin asiakkaiden on helpompi tulkita eri virhetyyppejä ja reagoida niihin.

TRPCError-virheen rakenne

Kun luot TRPCError-virheen, välität sille olion, jossa on code ja message. code vastaa HTTP-standardin tilakoodeja (esimerkiksi NOT_FOUND ja UNAUTHORIZED).

Tässä esimerkissä näytetään, miten ehtojen perusteella heitetään erityyppisiä TRPCError-virheitä.

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}`);
    }
  }
}

Virheiden käsittely prosedyyreissä

tRPC-proseduurisi sisältävät sovelluksen keskeisen liiketoimintalogiikan. On hyvä käytäntö kääriä mahdollisesti epäonnistuvat toiminnot, kuten tietokantakutsut tai API-pyynnöt, try...catch-lohkoihin.

catch-lohkossa voit muuntaa yleiset virheet erityisiksi TRPCError-instansseiksi ja antaa asiakkaalle selkeän palautteen.

Esimerkki: proseduurin virheenkäsittely

Tässä esimerkissä simuloidaan proseduuria, joka yrittää hakea käyttäjän tietokannasta. Esimerkki käsittelee sekä puuttuvan käyttäjän että tietokantayhteysvirheen ja muuntaa ne sopiviksi TRPCError-tyypeiksi.

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}`);
  }
}

Virheiden käsittely väliohjelmistossa

tRPC-väliohjelmistofunktiot suoritetaan ennen prosedyyrejä. Ne sopivat erinomaisesti yleisiin tarkistuksiin, kuten autentikointiin, valtuutukseen ja lokitukseen.

Jos väliohjelmistofunktio heittää TRPCError-virheen, sen suojaamaa proseduuria ei suoriteta, vaan virhe välitetään heti asiakkaalle. Tämä on tehokas tapa suojata API:a.

Esimerkki: väliohjelmiston valtuutusvirhe

Tämä väliohjelmisto tarkistaa, onko käyttäjällä 'admin'-rooli. Jos ei ole, se heittää UNAUTHORIZED-virheen, jolloin seuraavia prosedyyrejä ei suoriteta.

Näin varmistetaan, että vain valtuutetut käyttäjät voivat jatkaa.

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();

Virheiden välittäminen asiakkaalle

Kun tRPC-palvelimesi heittää TRPCError-virheen, tRPC-asiakas vastaanottaa jäsennellyn virheolion. Tämä olio sisältää yleensä seuraavat tiedot:

  • code: tRPC:n virhekoodi (esimerkiksi 'NOT_FOUND').
  • message: kuvaileva virheviesti.
  • data: virheen lisätiedot, mukaan lukien HTTP-tilakoodi.

Tämän ansiosta käyttöliittymä voi reagoida eri virhetyyppeihin tarkoituksenmukaisesti, mikä parantaa käyttökokemusta.

Virheenkäsittelyn tarkistus

Oletetaan, että tRPC-proseduuri hakee blogikirjoituksen. Jos pyynnön tekevä käyttäjä on autentikoitu, mutta hänellä ei ole tarvittavia oikeuksia tarkastella kyseistä kirjoitusta, mikä TRPCError-koodi olisi sopivin heittää?

Kertaus: hallitut virheet

Olet oppinut käsittelemään virheitä hallitusti tRPC:ssä!

  • tRPC sieppaa yleiset virheet automaattisesti, mutta TRPCError tarjoaa niille rakenteen.
  • Käytä TRPCError-virheitä yhdessä erityisten code-koodien, kuten NOT_FOUND ja UNAUTHORIZED, sekä viestien kanssa.
  • Toteuta prosedyyreissä try...catch muuntaaksesi yleiset virheet TRPCError-virheiksi.
  • Hyödynnä väliohjelmistoa yleisten tarkistusten, kuten autentikoinnin, tekemiseen heittämällä TRPCError-virheet jo varhaisessa vaiheessa.
  • Asiakkaat vastaanottavat jäsenneltyjä virheolioita, mikä mahdollistaa käyttöliittymän paremman virheenkäsittelyn.
Aloita maksutta

Opi tRPC:n tyyppiturvalliset API:t päästä päähän tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
10
Oppitunnit
40

Usein kysytyt kysymykset

Onko oppitunti ”tRPC-virheiden hallittu käsittely” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa tRPC:n tyyppiturvalliset API:t päästä päähän-oppimispolun 3 oppituntia, myös oppitunnin “tRPC-virheiden hallittu käsittely”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. tRPC:n tyyppiturvalliset API:t päästä päähän-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”tRPC-virheiden hallittu käsittely”?

Toteuttakaa parhaat käytännöt virheiden sieppaamiseen ja niihin vastaamiseen tRPC-proseduureissa ja -middlewaressa. Harjoittelet tRPC:n tyyppiturvalliset API:t päästä päähän-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni tRPC:n tyyppiturvalliset API:t päästä päähän-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin tRPC:n tyyppiturvalliset API:t päästä päähän-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 1/4.

Kuinka kauan ”tRPC-virheiden hallittu käsittely”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä tRPC:n tyyppiturvalliset API:t päästä päähän-oppitunnilla?

Kyllä. Jokainen tRPC:n tyyppiturvalliset API:t päästä päähän-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. tRPC-virheiden hallittu käsittely
  2. Mukautetut virhetyypit
  3. Datan muuntimet serialisointiin
  4. Virheiden muotoilu ja kenttäkohtainen validointipalaute
← Takaisin: tRPC:n tyyppiturvalliset API:t päästä päähän