@ardatan/fetch-event-source

中文文档
2.0.2发布于 2021/07/04MITTypeScriptESM + CJS零依赖近 30 天下载 2.6万

一个更好的 API , 用于生成事件源请求, 并带有获取的所有特性( )

中文使用文档

获取事件源

这个软件包提供了更好的 API 用于制作 源请求 - 也称为服务器发送事件 - 包含所有可用的特性 获取 API。 。 。 .

这个 默认浏览器事件源代码 API 对允许你提出的请求的类型实施若干限制: 只有参数 你被允许通过是 url 财务报告和审定财务报表 withCredentials,因此:

  • 您不能在请求正文中通过 : 您必须在 URL 内编码执行请求所需的所有信息, 即 限于2000个字符 在大多数浏览器中.
  • 您无法通过自定义请求头
  • 您只能请求获取 - 无法指定其它方法 .
  • 如果连接被切断,你对重试策略没有任何控制:浏览器会默默地为您重试几次,然后停下来,这不足以用于任何类型的强力应用.

这个库为消费服务器发送事件提供了一个替代界面,基于Frief API. 它完全兼容 事件流格式,所以如果你已经有一个服务器 发布这些事件,你可以像以前一样消耗它。 然而,你们现在对请求和答复有更大的控制权,因此:

  • 您可以使用任何请求方法/ 标题/ body, 加上所有通过获取而暴露的其他功能 () 。 如果默认的浏览器执行对您无效, 您甚至可以提供替代抓取执行 .
  • 如果您想要在解析事件源之前做一些自定义验证/处理, 您可以访问响应对象 。 如果您在应用程序服务器前有 API 网关( 如 nginx) , 此功能将会有用 : 如果网关返回错误, 您可能想要正确处理它 .
  • 如果连接被剪切或出错, 您将完全控制重试策略 .

此外,这个库还插入了浏览器的 页面可见度 API 因此,如果文档被隐藏(例如,用户将窗口最小化),连接就会关闭,当最后一个事件ID再次被可见时会自动重试。 这可以减少服务器上的负载, 因为它没有不必要地打开连接( 但是如果需要, 您可以选择退出此行为 )

安装

npm install @microsoft/fetch-event-source

使用量

// BEFORE:
const sse = new EventSource('/api/sse');
sse.onmessage = (ev) => {
    console.log(ev.data);
};

// AFTER:
import { fetchEventSource } from '@microsoft/fetch-event-source';

await fetchEventSource('/api/sse', {
    onmessage(ev) {
        console.log(ev.data);
    }
});

你可以通过所有的 其他参数 默认获取 API 时曝光, 例如 :

const ctrl = new AbortController();
fetchEventSource('/api/sse', {
    method: 'POST',
    headers: {
        'Content-Type': 'application/json',
    },
    body: JSON.stringify({
        foo: 'bar'
    }),
    signal: ctrl.signal,
});

您可以添加更好的错误处理, 例如 :

class RetriableError extends Error { }
class FatalError extends Error { }

fetchEventSource('/api/sse', {
    async onopen(response) {
        if (response.ok && response.headers.get('content-type') === EventStreamContentType) {
            return; // everything's good
        } else if (response.status >= 400 && response.status < 500 && response.status !== 429) {
            // client-side errors are usually non-retriable:
            throw new FatalError();
        } else {
            throw new RetriableError();
        }
    },
    onmessage(msg) {
        // if the server emits an error message, throw an exception
        // so it gets handled by the onerror callback below:
        if (msg.event === 'FatalError') {
            throw new FatalError(msg.data);
        }
    },
    onclose() {
        // if the server closes the connection unexpectedly, retry:
        throw new RetriableError();
    },
    onerror(err) {
        if (err instanceof FatalError) {
            throw err; // rethrow to stop the operation
        } else {
            // do nothing to automatically retry. You can also
            // return a specific retry interval here.
        }
    }
});

兼容性

这个库以打字符来写作,目标为ES2017特性,得到所有常绿浏览器(Chrome,Firefox,Safari,Edge)的支持. 你也许需要 多填充文本解析器 用于旧边缘(版本 < 79),但:

require('fast-text-encoding');

捐款

该项目欢迎各方的贡献和建议。 大多数捐款要求您同意 撰稿人许可协议(CLA)宣布,你有权并且实际上确实给了我们 有权使用您的贡献。 详情请访问 https://cla.opensource.microsoft.com 互联网档案馆的存檔,存档日期2014-10-02。 。 。 .

当您提交拉拉请求时, CLA bot 会自动确定您是否需要提供 a CLA并适当装饰PR(如状态检查、评论)。 只要听从指示 由机器人提供。 你只需要用我们的CLA 一次就能完成.

该项目通过了 Microsoft 开源行为守则。 。 。 . 更多信息见 《行为守则》 或者说 联系人 打开码@ microsoft.com 并附上任何其他问题或评论.

版本与发布记录

@ardatan/fetch-event-source 共发布 1 个版本,首次发布于 2021/07/04;过去 12 个月发布了 0 个版本。

版本发布日期距今
2.0.2latest2021/07/045 年前

关于 @ardatan/fetch-event-source 的常见问题

@ardatan/fetch-event-source 是什么?

一个更好的 API , 用于生成事件源请求, 并带有获取的所有特性( )

如何安装 @ardatan/fetch-event-source?

在项目目录运行 npm install @ardatan/fetch-event-source,或使用 pnpm add / yarn add / bun add。

@ardatan/fetch-event-source 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@ardatan/fetch-event-source 支持 ESM 还是 CommonJS?

同时提供 ES Module 与 CommonJS 入口,import 和 require() 都可以使用,打包工具会自动选择合适的版本。

@ardatan/fetch-event-source 可以商用吗?

@ardatan/fetch-event-source 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@ardatan/fetch-event-source 的下载量有多少?

根据 npm 官方下载统计,@ardatan/fetch-event-source 在 2026/10/07 – 2026/11/05 这 30 天内被下载 25,872 次,日均约 862 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@ardatan/fetch-event-source 还在维护吗?

最新版本 2.0.2 发布于 2021/07/04(5 年前);至今共发布 1 个版本,其中过去 12 个月发布了 0 个;首次发布于 2021/07/04。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。