使用fetchEventSource
参考git源码:https://github.com/Azure/fetch-event-source/tree/main
本地联通 发现数据并没有流式输出:vue代理需要关闭compress
如下:
devServer:{ proxy:{}, compress:false }
复制
安装插件
npm install @microsoft/fetch-event-source
复制
引入插件
import { fetchEventSource } from "@microsoft/fetch-event-source";
复制
vue关键代码:
connectSse(){ const ctrl = new AbortController(); fetchEventSource('/api/v1/sse',{ method: 'POST', mode: 'no-cors', headers: { 'Content-Type': 'application/json', }, body: JSON.stringify({data:[this.searchData]}), signal: ctrl.signal, onopen(response){ // 成功连接时回调 console.log('连接成功',response) }, onmessage(msg) { // 服务器返回消息回调 返回{ data,event,id,retry } ,data即服务器返回数据 if (msg.event == '') { // 进行连接正常的操作流程 let result = JSON.parse(msg.data) // 将需要展示的数据更新到vue的data中,当然如下this.showData肯定赋值不上,需要将this 指向一个变量,用变量接受数据即可,以下只是展示 this.showData += result.content } if (msg.event === 'close') { ctrl.abort() } }, onerror(err) { throw new err() } }) },
复制
研发阶段 需要配置nginx