Vea jÀlgimine React rakenduses Sentry abil

Vea jÀlgimine React rakenduses Sentry abil

TĂ€na rÀÀgin teile vigade jĂ€lgimisest reaalajas React rakenduses. VĂ€line kasutajaliidese rakendus ei ole tavaliselt vigade jĂ€lgimiseks mĂ”eldud. MĂ”ned ettevĂ”tted lĂŒkkavad sageli vigade jĂ€lgimise edasi, naastes sellele alles pĂ€rast dokumentatsiooni, testimist ja muud. Siiski, kui saate oma toodet paremaks muuta, siis tehke seda lihtsalt!

1. Miks vajate Sentry-d?

Eeldan, et olete huvitatud vigade jÀlgimisest tootmisprotsessis.

Kas arvestate, et seda on liiga vÀhe?

HĂ€sti, vaatame detaile.

Peamised pÔhjused, miks arendajad peaksid Sentry-d kasutama:

  • VĂ€hendab riske vigase koodi juurutamisel.
  • Aitab QA-l koodi testida.
  • Kiire probleemide teavitamine.
  • VĂ”ime vigade kiireks parandamiseks.
  • Mugav vigade kuvamine administraatori paneelis.
  • Vigade sorteerimine kasutaja/brauseri segmentide jĂ€rgi.

Peamised pÔhjused CEO-le/projekti juhile.

  • Raha kokkuhoid (Sentry saab paigaldada teie serveritesse).
  • Kasutajate tagasiside saamine.
  • MĂ”istmine, mis teie projektiga reaalajas valesti on.
  • MĂ”istmine, kui palju probleeme inimestel teie rakendusega on.
  • Aitab leida kohti, kus teie arendajad on eksinud.

Arvan, et arendajad oleksid sellest artiklist eelkÔige huvitatud. Samuti vÔite seda pÔhjuste loetelu kasutada, et veenda juhtkonda Sentry integreerima.

Olge Àritegevuse jaoks viimase punkti osas ettevaatlik.

Kas olete juba huvitatud?

Vea jÀlgimine React rakenduses Sentry abil

Mis on Sentry?

Sentry on avatud lĂ€htekoodiga vigade jĂ€lgimise rakendus, mis aitab arendajatel realajas tĂ”rkeid jĂ€lgida ja parandada. Ärge unustage, et rakendus aitab tĂ”husust suurendada ja kasutajakogemust parandada. Sentry toetab JavaScripti, Node'i, Pythoni, PHP-d, Ruby't, Java't ja teisi programmeerimiskeeli.

Vea jÀlgimine React rakenduses Sentry abil

2. Logige sisse ja looge projekt.

  • Avage oma Sentry konto. VĂ”ib-olla peate sisse logima. (MĂ€rgin, et Sentry saab paigaldada teie serveritesse.)
  • JĂ€rgmiseks sammuks on projekti loomine.
  • Valige oma keel loendist. (Kavatseme valida Reacti. KlĂ”psake "Loo projekt".)

Vea jÀlgimine React rakenduses Sentry abil

Konfigureerige oma rakendus. Alustuseks nÀete, kuidas Sentryt konteinersse integreerida:

import * as Sentry from '@sentry/browser';
// Sentry.init({
//  dsn: "<https:>"
// });
// oleks olnud kutsutud enne, kui seda siin kasutatakse
// ideaalis enne isegi teie react rakenduse renderdamist 

class ExampleBoundary extends Component {
    constructor(props) {
        super(props);
        this.state = { error: null };
    }

    componentDidCatch(error, errorInfo) {
      this.setState({ error });
      Sentry.withScope(scope =&gt; {
        Object.keys(errorInfo).forEach(key =&gt; {
          scope.setExtra(key, errorInfo[key]);
        });
        Sentry.captureException(error);
      });
    }

    render() {
        if (this.state.error) {
            //render fallback UI
            return (
              <a onclick="{()" > Sentry.showReportDialog()}&gt;Esitama tagasisidet</a>
            );
        } else {
            //kui viga ei esine, renderdage lapsed muutumatuna
            return this.props.children;
        }
    }
}

Sentry-l on kasulik nÔustaja, mis aitab teil mÔista, mida edasi teha. Saate jÀrgida jÀrgmisi samme. Soovin nÀidata, kuidas luua oma esimene veakÀsitleja. SuurepÀrane, projekt on loodud! Liigutame jÀrgmisse etappi.

3. Reacti ja Sentry integreerimine

Peate installima npm paketi oma projekti.

npm i @sentry/browser

Initsialiseerige Sentry oma konteineris:

Sentry.init({
  // dsn: #dsnUrl,
});

DSN leiate aadressilt Projects -> Settings -> Client Keys. Klientide vÔtmed on otsingureas.

Vea jÀlgimine React rakenduses Sentry abil

componentDidCatch(error, errorInfo) {
  Sentry.withScope(scope => {
    Object.keys(errorInfo).forEach(key => {
      scope.setExtra(key, errorInfo[key]);
    });
    Sentry.captureException(error);
 });
}

4. Esimese vea jÀlgimine

NĂ€iteks kasutasin lihtsat muusikarakendust API Deezeriga. Saate seda nĂ€ha. siin. Peame tekitama vea. Üks viis seda teha on pöörduda "undefined" omaduse poole.

Peame looma nupu, mis kutsub esile console.log jot user.email. PÀrast seda toimingut peaksime saama veateate: Uncaught TypeError (ei suuda lugeda omadust undefined email) puuduvate objekti kasutaja tÔttu. Samuti saate kasutada Javascripti erandit.

Kogu konteiner nÀeb vÀlja selline:

import React, { Component } from "react";
import { connect } from "react-redux";
import { Input, List, Skeleton, Avatar } from "antd";
import * as Sentry from "@sentry/browser";
import getList from "..\/store\/actions\/getList";

const Search = Input.Search;

const mapState = state =&gt; ({
  list: state.root.list,
  loading: state.root.loading
});

const mapDispatch = {
  getList
};

class Container extends Component {
  constructor(props) {
    super(props);

    Sentry.init({
      dsn: "https:\/\/fc0edcf6927a4397855797a033f04085@sentry.io\/1417586",
    });
  }

  componentDidCatch(error, errorInfo) {
    Sentry.withScope(scope =&gt; {
      Object.keys(errorInfo).forEach(key =&gt; {
        scope.setExtra(key, errorInfo[key]);
      });
      Sentry.captureException(error);
    });
  }
  render() {
    const { list, loading, getList } = this.props;
    const user = undefined;
    return (
      <div classname="App">
        <button
          type="button"
          onclick="{()" > console.log(user.email)}
        &gt;
          test error1
        </button>
        <div onclick="{()" > Sentry.showReportDialog()}&gt;Teata tagasiside1</div>
        <h1>Muusika Otsija</h1>
        <br />
        <search onsearch="{value" > getList(value)} enterButton \/&gt;
        {loading &amp;&amp; <skeleton avatar title="{false}" loading="{true}" active />}
        {!loading &amp;&amp; (
          <list
            itemlayout="horizontal"
            datasource="{list}"
            locale="{{" emptytext: <div /> }}
            renderItem={item =&gt; (
              <List.Item>
                &lt;List.Item.Meta
                  avatar={<avatar src="{item.artist.picture}" />}
                  title={item.title}
                  description={item.artist.name}
                \/&gt;
              </List.Item>
            )}
          />
        )}
      </div>
    );
  }
}

export default connect(
  mapState,
  mapDispatch
)(Container);

PĂ€rast selle nupu integreerimist peate seda testima brauseris.

Vea jÀlgimine React rakenduses Sentry abil

Meil on esimene viga

Vea jÀlgimine React rakenduses Sentry abil

Whoo-hoo!

Vea jÀlgimine React rakenduses Sentry abil

Kui klÔpsate veatiitel, nÀete kallutust.

Vea jÀlgimine React rakenduses Sentry abil

SÔnumid nÀevad halvad vÀlja. Loomulikult oleme nÀinud veateateid, mÔistmata, kust see kood pÀrineb. Vaikimisi tegemist on ReactJS allika kaardiga, sest need ei ole seadistatud.

Soovin samuti pakkuda juhiseid allika kaardi seadistamiseks, kuid see pikendaks seda artiklit oluliselt.

Saate seda teemat edasi uurida siin. Kui see artikkel teid huvitab, Dmitry Nozhenko avab teise osa allika kaardi integreerimisest. Nii et vajutage rohkem meeldimisnuppe ja registreeruge Dmitry Nozhenko, et mitte jÀÀda ilma teisest osast.

5. Kasutamine Sentry lÔpp-punktiga API

Olgu. Oleme varasemates punktides arutanud javascripti erandi. Kuid mida me teeme XHR vigadega?

Sentryl on samuti kohandatud vigade töötlemine. Olen seda kasutanud API vigade jÀlgimiseks.

Sentry.captureException(err)

Saate kohandada vea nime, taset, lisada andmeid, ainulaadseid kasutajateavet oma rakenduse, e-posti jne kaudu.

superagent
  .get(`https://deezerdevs-deezer.p.rapidapi.com/search?q=${query}`)
  .set("X-RapidAPI-Key", #id_key)
  .end((err, response) => {
    if (err) {
      Sentry.configureScope(
        scope => scope
          .setUser({"email": "john.doe@example.com"})
          .setLevel("Error")
      );
      return Sentry.captureException(err);
    }

    if (response) {
      return dispatch(setList(response.body.data));
    }
  });

Sooviksin kasutada API catch jaoks ĂŒhiseid funktsioone.

import * as Sentry from "@sentry/browser";

export const apiCatch = (error, getState) => {
  const store = getState();
  const storeStringify = JSON.stringify(store);
  const { root: { user: { email } } } = store;

  Sentry.configureScope(
    scope => scope
      .setLevel("Error")
      .setUser({ email })
      .setExtra("store", storeStringify)
  );
    // Sentry.showReportDialog(); - Kui soovite kasutajate tagasisidet vea kohta
  return Sentry.captureException(error);
};

Impordige see funktsioon API kutsumisse.

export default query => (dispatch, getState) => {
  superagent
    .get(`https://deezerdevs-deezer.p.rapidapi.com/search?q=${query}`)
    .set("X-RapidAPI-Key", #id_key)
    .end((error, response) => {
      if (error) {
        return apiCatch(error, getState)
      }

      if (response) {
        return dispatch(setList(response.body.data));
      }
    });
};

Kontrollime meetodeid:

  • setLevel vĂ”imaldab sisestada taseme vea painutisse. Sellel on omadused - 'fatal', 'error', 'warning', 'log', 'info', 'debug', 'critical'.
  • setUser aitab salvestada kĂ”ik kasutajateave (id, e-posti aadress, makseplaan jne).
  • setExtra vĂ”imaldab mÀÀrata mis tahes vajalikud andmed, nĂ€iteks poe.

Kui soovite saada kasutajate tagasisidet vea kohta, peaksite kasutama funktsiooni showReportDialog.

Sentry.showReportDialog();

KokkuvÔte:

TĂ€nasel pĂ€eval kirjeldasime ĂŒht viisi Sentry integreerimiseks Reacti rakendusse.

→ Telegrami vestlus Sentry

Allikas: habr.com

Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne hostimine veebilehtede jaoks DDoS-i kaitsega, VPS VDS serverid | ProHoster