前端Vue使用@microsoft/fetch-event-source插件发送SSE请求实现类似ChatGPT的流式回答

为什么要用这个插件而不用原生的EventSource Api呢?

首先是因为EventSource只能进行 GET 请求,无法使用POST或者其他请求方式;

其次无法传递自定义请求头和请求体;

再者就是中断后无法控制重试。

为了解决以上问题,这里就推荐使用@microsoft/fetch-event-source这个插件,接下来我来说一下怎么在Vue中使用这个插件。

安装
npm install @microsoft/fetch-event-source
使用 
<script>
import { fetchEventSource } from '@microsoft/fetch-event-source';
methods:{
    sendRequest(){
        const controller = new AbortController(); //用于中断请求
        fetchEventSource('/api/你的请求地址', {
            method: 'POST',
            headers: { 'Content-Type': 'application/json' },
            body: JSON.stringify({ a: '1' })
            openWhenHidden: true, //页面退至后台是否保持连接
            signal: controller.signal,
            onmessage(msg) {
                console.log(msg);
            },
            onerror(err) {
                console.log(err);
                if(如果需要关闭){
                    controller.abort(); //中断请求
                }
            }
        }
    }
}
</script>
到此就能够实现类似ChatGPT的流式返回啦!!
Vue2中使用`fetch`配合`EventSource`(Server-Sent Events)接收和显示流式文本是一个常见的实践,特别是在需要实现实时更新的情况下。下面是一个简单的示例: 首先,在组件里安装`axios`(用于`fetch`)和`vue-eventsource`插件,它们可以帮助简化`EventSource`的使用: ```bash npm install axios vue-eventsource ``` 然后在`.vue`文件中引入并设置: ```html <template> <div id="stream-view"> <p v-if="message">{{ message }}</p> <!-- ...其他内容... --> </div> </template> <script> import axios from 'axios'; import { eventSource } from 'vue-eventsource'; export default { data() { return { message: '', }; }, mounted() { const es = eventSource('your-server-url', { /* 可选配置 */ }); es.on('data', (event) => { this.message = event.data; // 如果你想实时渲染,可以用v-html或innerHTML // 这里仅为了简单展示,所以只是替换文字 this.$refs.streamView.innerText = this.message; }); es.on('error', (err) => { console.error('Error occurred:', err); }); es.onclose(() => { console.log('Connection closed'); }); }, beforeDestroy() { es.close(); // 关闭连接,防止内存泄漏 }, }; </script> ``` 在这个例子中,我们监听`'data'`事件来获取从服务器传来的流式文本,将其存储在`this.message`中,然后更新视图。如果遇到错误或连接关闭,相应的处理函数会被触发。 请注意,你需要将 `'your-server-url'` 替换为你实际的服务器地址,该地址应该提供一个支持 SSE 的接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Twistedzs

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值