传输
传输允许您更改事件发送到 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
});