96SEO 2026-08-07 10:45 31
最近在做一个 AI 对话相关的项目,涉及到流式输出的场景。前端需要调用大模型 API,但直接在前端调用会遇到两个关键痛点:

这篇文章记录了如何通过 BFF层来解决掉上述痛点,并配合 SSE 与 Vite 建立流式对话体验。
BFF,直译即“为前端服务的后端”。它在微服务架构中常见,却一样适用于大前端场景。
传统模式下前端直接调用后端 Java/Go 提供的 RESTful 接口,实现增删改查。但面对流式输出、二进制数据或多接口聚合时前端代码容易膨胀、难以维护。
我们在前端与后端之间加一层 Node 服务:
前端 → Node → 后端
BFF 层可以帮助我们:
SSE 是基于 HTTP 的服务器推送技术,允许服务器向客户端单向推送事件流。相比 WebSocket,它实现更简单、兼容性更好。非常适合大模型以流式方式返回结果的场景。
stream-bff/
├── src/
│ ├── App.vue # 前端主组件
│ └── main.js # Vue 入口
├── server.mjs # BFF 后端服务
├── vite.config.js # Vite 配置
├── .env.local # 环境变量
├── package.json # 项目依赖
└── readme67.md # 笔记文档
pnpm add express dotenv
# 若使用 npm:
# npm i express dotenv
将 API Key 写入 .env.local并确保该文件已加入 .gitignore防止泄漏:
VITE_DEEPSEEK_API_KEY=your_api_key_here
浏览器同源策略要求协议、域名、端口三者全部相同。只要任意一项不匹配,就会触发跨域限制。我们利用 Vite 本地代理把前端请求转发至同源的 BFF 服务,从而规避该限制。老实说,
import { defineConfig } from 'vite';不过,import vue from '@vitejs/plugin-vue';export default defineConfig({
plugins:,server: {
说到proxy,{
再看'/api',{
target这方面。'http://localhost:3000',// BFF 服务地址
changeOrigin: true,secure: false,rewrite: => path.replace,},},},});
import * as dotenv from 'dotenv';import express from 'express';import fetch from 'node-fetch';dotenv.config;const app = express;const PORT = process.env.PORT || 3000;// 简单健康检查
app.get => {
res.send;}),/**
* 流式转发接口
* 前端 -> /api/stream?prompt=xxx
* BFF -> DeepSeek SSE 接口
*/
app.get => {
const { prompt } = req.query;if {
return res.status.json;}
const endpoint = 'https://api.deepseek.com/v1/chat/completions';try {
const upstream = await fetch(endpoint,{
从method来看,'POST',headers: {
Authorization: `Bearer ${process.env.VITE_DEEPSEEK_API_KEY}`。'Content-Type': 'application/json',},body: JSON.stringify({
至于model,'deepseek-v4-flash',stream: true,messages:,}),});// 若上游返回错误,直接透传给前端
if {
const errMsg = await upstream.text;return res.status.json;}
// 设置 SSE 响应头,让浏览器保持长连接
res.setHeader;res.setHeader;res.setHeader;// 将上游 ReadableStream 按块转发给前端
const reader = upstream.body.getReader;怎么说呢,const decoder = new TextDecoder;while {
const { done,value } = await reader.read;if break,const chunk = decoder.decode;// 每个块都按照 SSE 格式包装:data:
res.write;}
res.end,} catch {
console.error;res.status.json;
}
}),话说回来,app.listen => {
console.log;}),
前端 → Vite Proxy
↓ ↓
BFF → DeepSeek SSE API
↑ ↑
隐藏 API Key 跨域已被消除
说到主要思路。使用原生 EventSource 接收服务器推送的流式数据,并实时更新 UI。
{{ answer }}
正在加载,请稍候…话说回来,
npm run dev # 或 pnpm dev、yarn dev
node server.mjs # 如需热重载可使用 nodemon -r esm server.mjs
${PORT} 与 Vite proxy.target 配置保持同步。Error.stack` 并检查日志。通过引入 BFF 层,我们成功解决了两大使用者痛点:
* 这篇文章所用代码均为最小可运行示例,实际生产环境请结合鉴权、限流、日志监控等机制进一步强化安全与可靠性。怎么说呢,*
©2026 AI Flow Demo · Powered by Vue + Vite + Node GitHub 示例仓库 ↗️<\/a> <\/footer>`
作为专业的SEO优化服务提供商,我们致力于通过科学、系统的搜索引擎优化策略,帮助企业在百度、Google等搜索引擎中获得更高的排名和流量。我们的服务涵盖网站结构优化、内容优化、技术SEO和链接建设等多个维度。
| 服务项目 | 基础套餐 | 标准套餐 | 高级定制 |
|---|---|---|---|
| 关键词优化数量 | 10-20个核心词 | 30-50个核心词+长尾词 | 80-150个全方位覆盖 |
| 内容优化 | 基础页面优化 | 全站内容优化+每月5篇原创 | 个性化内容策略+每月15篇原创 |
| 技术SEO | 基本技术检查 | 全面技术优化+移动适配 | 深度技术重构+性能优化 |
| 外链建设 | 每月5-10条 | 每月20-30条高质量外链 | 每月50+条多渠道外链 |
| 数据报告 | 月度基础报告 | 双周详细报告+分析 | 每周深度报告+策略调整 |
| 效果保障 | 3-6个月见效 | 2-4个月见效 | 1-3个月快速见效 |
我们的SEO优化服务遵循科学严谨的流程,确保每一步都基于数据分析和行业最佳实践:
全面检测网站技术问题、内容质量、竞争对手情况,制定个性化优化方案。
基于用户搜索意图和商业目标,制定全面的关键词矩阵和布局策略。
解决网站技术问题,优化网站结构,提升页面速度和移动端体验。
创作高质量原创内容,优化现有页面,建立内容更新机制。
获取高质量外部链接,建立品牌在线影响力,提升网站权威度。
持续监控排名、流量和转化数据,根据效果调整优化策略。
基于我们服务的客户数据统计,平均优化效果如下:
我们坚信,真正的SEO优化不仅仅是追求排名,而是通过提供优质内容、优化用户体验、建立网站权威,最终实现可持续的业务增长。我们的目标是与客户建立长期合作关系,共同成长。
Demand feedback