事件源
兼容什么WG/W3C 服务器发送事件/事件源 客户端。 该模块试图执行超出规格的绝对最低的特性/变化.
如果你在寻找一个现代的替代品, 限制较少的API, 检查一下 eventsource-client 软件包。 。 。 .
安装
npm install --save eventsource
支持的引擎
- 节点.js 18
- 克罗姆语 >= 63
- 萨法里岛
- Firefox 第65页
- 边 上 79
- 德诺 · 1.30
- (单位:千美元)
基本上,任何支持以下内容的环境:
如果您需要支持旧的运行时间,请尝试 2.x 分支/版本范围(注: 2.x分支主要针对Node.js,而非浏览器).
使用量
import {EventSource} from 'eventsource'
const es = new EventSource('https://my-server.com/sse')
/*
* This will listen for events with the field `event: notice`.
*/
es.addEventListener('notice', (event) => {
console.log(event.data)
})
/*
* This will listen for events with the field `event: update`.
*/
es.addEventListener('update', (event) => {
console.log(event.data)
})
/*
* The event "message" is a special case, as it will capture events _without_ an
* event field, as well as events that have the specific type `event: message`.
* It will not trigger on any other event type.
*/
es.addEventListener('message', (event) => {
console.log(event.data)
})
/**
* To explicitly close the connection, call the `close` method.
* This will prevent any reconnection from happening.
*/
setTimeout(() => {
es.close()
}, 10_000)
类型脚本
确定您已经配置了您的 TSConfig , 这样它就能匹配您的目标环境 。 如果你是目标浏览器,这将是 dom数字 :
{
"compilerOptions": {
"lib": ["dom"],
},
}
如果你使用Node.js,确保你有 @types/node 安装(并且是第18版或以上)。 云旗工人拥有 @cloudflare/workers-types 包括:.
以下出错是由于瞄准一个不具备必要类型的环境:
error TS2304: Cannot find name 'Event'.
error TS2304: Cannot find name 'EventTarget'.
error TS2304: Cannot find name 'MessageEvent'.
从 v1 / v2 移动
见 移民.md 详细移民指南.
扩展到 WhatWG/W3C API
错误时的信件和代码属性
这个 error 事件有一个 message 财务报告和审定财务报表 code 属性,用于获取更多关于错误的信息。 在规格中,事件
es.addEventListener('error', (err) => {
if (err.code === 401 || err.code === 403) {
console.log('not authorized')
}
})
指定 fetch 执行
这个 EventSource 构造器接受可选 fetch 属性,用于指定 fetch 用于执行.
这在全球化环境中可能有用 fetch 函数不可用,但也可以用来改变请求/响应行为.
设置 HTTP 请求头
const es = new EventSource('https://my-server.com/sse', {
fetch: (input, init) =>
fetch(input, {
...init,
headers: {
...init.headers,
Authorization: 'Bearer myToken',
},
}),
})
HTTP/ HTTPS 代理服务器
使用类似 node-fetch-native 通过环境变量或明确的配置,添加代理支持.
// npm install node-fetch-native --save
import {fetch} from 'node-fetch-native/proxy'
const es = new EventSource('https://my-server.com/sse', {
fetch: (input, init) => fetch(input, init),
})
允许未经授权的 HTTPS 请求
使用类似 undici 通过使用一个 Agent。 。 。 .
// npm install undici --save
import {fetch, Agent} from 'undici'
await fetch('https://my-server.com/sse', {
dispatcher: new Agent({
connect: {
rejectUnauthorized: false,
},
}),
})
许可证
麻省理工学院有执照 见 自由主义。 。 。 .