window中有一个叫EventSource的构造函数。一个EventSource实例会对服务器开启一个持久化的连接,以text/event-stream格式发送事件,此连接会一直保持开启直到通过调用EventSource.close()关闭。但使用EventSource时只能把参数加到url后面,而且也不能像fetch请求那样设置header等参数。借助fetch-event-source这个库就可以像发起fetch请求一样发起服务器单向通信请求。
对接AI的api,返回的数据是流式的,后台不好转,前端项目vue3
使用 @microsoft/fetch-event-source,实现fetchEvent 的post传送
fetch-event-source使用
await fetchEventSource(url, {
method: "POST",
headers: {
"Content-Type": "application/json; charset=utf-8",
"Accept": "text/event-stream",
"Authorization": `Bearer XXXX`,
"Transfer-Encoding": "chunked",
},
body: JSON.stringify(params),
signal: cancelTokenSourceRef.current.signal,
onopen(response) {
// 成功建立连接
},
onmessage(msg) {
// 接收信息
// 这里接收数据处理业务逻辑
const result = JSON.parse(msg.data);
if (result.event === "message") {
}else if (result.event === "message_end"){
console.log("回答完毕");}
}, // 接收信息
onerror(err) {
console.error("发生错误", err);
throw err;
},
onclose(res) {
console