You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SSE流结束后向前端返回token并完成后端存储

解决SSE流结束后执行数据库操作并返回Token的问题

直接修改end事件回调代码,在异步流程中完成数据库存储、Token获取,并通过SSE流的最后一条消息将Token返回给前端:

const response = ResponsefromServer;

const sseStream = new SseStream(req);
sseStream.pipe(res);

const reader = response.body;

reader.on('data', (data: any) => {
  sseStream.write({ data });
});

reader.on('end', async () => {
  console.log("End of stream");
  try {
    // 1. 执行数据库存储逻辑,替换为你的实际存储代码
    const savedRecord = await yourDbModel.save({
      // 填入需要存储的业务数据,比如从请求参数/流内容中提取的信息
      streamContent: 'xxx',
      requestId: req.id
    });

    // 2. 获取或生成目标Token,替换为你的实际Token逻辑
    const tokenId = await generateToken(savedRecord.id);

    // 3. 将Token以SSE消息形式发送给前端
    sseStream.write({ data: JSON.stringify({ token: tokenId }) });
  } catch (err) {
    // 可选:向前端反馈错误信息
    sseStream.write({ data: JSON.stringify({ error: '后续操作失败' }) });
    console.error('流结束后处理出错:', err);
  } finally {
    // 确保无论成败都关闭SSE流
    sseStream.end();
  }
});

关键注意事项

  • 利用async/await处理异步的数据库操作和Token生成,避免回调嵌套
  • 用try/catch捕获异步错误,防止流程中断导致流无法关闭
  • 发送Token时需将对象转为JSON字符串,前端接收后通过JSON.parse()解析即可
  • 必须在finally块中调用sseStream.end(),保证SSE流正常终止

内容的提问来源于stack exchange,提问作者Arsene Wenger

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 08:02:39