如何用post请求调用Server-Sent Events服务

如何用post请求调用Server-Sent Events服务

  1. Server-Sent Events服务(简称:SSE),本身只支持get请求
  2. 当在项目中使用的时候,总有后端要用SSE服务,并且使用post请求
  3. 有些后端能沟通,但是某些自以为是的后端,沟通不了(服)
  4. 但是活要干,接口要对接,那就找其他办法吧

那我们该怎么做呢?我找到一个插件 @microsoft/fetch-event-source

  • 首先安装依赖
js 复制代码
 npm install @microsoft/fetch-event-source
  • 在项目中使用,建议在二次封装axios的地方封装一下,或者在封装公共方法的文件中封装一下
  • 我是在utils文件中封装的,也就是封装公共方法的文件里
js 复制代码
import { fetchEventSource } from "@microsoft/fetch-event-source";

// SSE post请求
const controller = new AbortController();
const signal = controller.signal;

/* 
 * url 接口地址
 * params 参数
 * sCB 成功回调
 * eCB 失败回调
*/
export const sseRequset = (url, obj, sCB, eCB) => {
  fetchEventSource(url, {
    method: "POST",
    signal: signal,
    headers: {
      "Content-Type": "application/json",
      Accept: "*/*",
    },
    body: JSON.stringify(obj),
    onmessage(msg) {
      sCB(msg);
    },
    onerror(err) {
      // 必须抛出错误才会停止
      eCB(err);
      throw err;
    },
  });
};
  • 在页面中调用
js 复制代码
import { sseRequset } from '../utils'

// 发送消息,并调用流式接口
const confirmChat = async () => {
    const params = {
        agentId: agentParams.agentId,
        start: false,
        query: chatDetail.value,
        sessionId: sessionid
    }
    sseRequset(`${agentParams.winUrl}/${agentParams.requestUrl}`, params, (res) => {
        if (res.data) {
            // 成功处理
            // createSseConnection(res.data)
        }
    }, err => {
    	// 错误处理
    })
};
  • 最后处理一下数据就行了。
相关推荐
wordbaby1 分钟前
前端进阶:小程序 Canvas 2D 终极指北 — 给图片优雅添加水印
前端·canvas
树上有只程序猿4 分钟前
OpenClaw虽香,但不是人人都养得起“小龙虾
前端·openai
SuperEugene21 分钟前
Vue3 + Element Plus 全局 Message、Notification 封装与规范|Vue生态精选
前端·javascript·vue.js
掘金安东尼23 分钟前
活动落地页效率翻倍:RollCode 这次更新有点猛
前端·低代码·面试
北冥有鱼其名为坤23 分钟前
诡异!vite+vue3 项目图片无法显示,我怀疑人生…
前端
FE_winter25 分钟前
OpenClaw Skills 进阶实战:前端开发者的 AI 技能库搭建指南
前端·后端·程序员
wordbaby41 分钟前
小白也能看懂:小程序 Canvas 给图片添加水印的终极指南
前端·canvas
Mapmost42 分钟前
“汛”速响应:流域洪水仿真分析,如何实现淹没过程的精准推演?
前端
梁大虎44 分钟前
Electrobun 开发必看:CEF 依赖下载失败?手动解压一招搞定!
前端·javascript·后端
青青家的小灰灰1 小时前
拒绝 Prop Drilling 与隐式耦合:Vue 组件通讯的全景指南与最佳实践
前端·javascript·vue.js