传输

传输允许您更改事件发送到 Sentry 的方式。

JavaScript SDK 使用 transport 将事件发送到 Sentry。在现代浏览器中,大多数传输使用浏览器的 fetch API 发送事件。如果由于连接问题导致发送失败,传输会丢弃该事件。

您可以通过在 init 调用中设置 transport 选项来更改传输方式。SDK 提供了几种内置传输,您也可以创建自己的传输。

makeBrowserOfflineTransport 是一个内置传输,它使用 IndexedDB API 在浏览器离线时存储事件。当浏览器重新上线时,传输会将存储的事件发送到 Sentry。了解更多关于如何使用它的信息。

您还可以为 Sentry 提供自定义传输。传输必须符合 Transport 接口:

Copied
interface Transport {
  send(request: Envelope): Promise<TransportMakeRequestResponse>;
  flush(timeout?: number): Promise<boolean>;
}

您还可以使用 @sentry/core 中的 createTransport 工具来帮助处理一些样板代码:

Copied
import { createTransport } from '@sentry/core';
import * from '@sentry/browser';

function makeFetchTransport(
  options
): Transport {
  function makeRequest(request) {
    const requestOptions: RequestInit = {
      body: request.body,
      method: 'POST',
      referrerPolicy: 'origin',
      headers: options.headers,
      ...options.fetchOptions,
    };

    return fetch(options.url, requestOptions).then(response => {
      return {
        statusCode: response.status,
        headers: {
          'x-sentry-rate-limits': response.headers.get('X-Sentry-Rate-Limits'),
          'retry-after': response.headers.get('Retry-After'),
        },
      };
    });
  }

  return createTransport(options, makeRequest);
}

Sentry.init({
  dsn: 'https://examplePublicKey@o0.ingest.sentry.io/0',
  transport: makeFetchTransport
});