使用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