项目实践2:启用node用sse报错?

63 阅读3分钟

为什么启动server之后通过 http://localhost:3000/stream?question=hello 访问浏览器,返回的是data: Error fetching from OpenAI

错误排查:

  1. 启动后端服务器并检查运行状态

  2. 测试 API 端点并分析错误原因

  3. 检查 API 密钥和网络连接

  4. 修复服务器配置问题

先打开

node server.js

发现还是这样,然后用这个

curl "http://localhost:3000/stream?question=hello"

在 Mac 系统中,curl "http://localhost:3000/stream?question=hello" 是一条通过终端执行的命令,作用是向本地运行的服务发送 HTTP 请求,具体含义如下:

curl:这是一个命令行工具(Mac 系统默认预装),用于在网络上传输数据,支持 HTTP、HTTPS 等多种协议,这里用于发送 HTTP 请求。

http://localhost:3000/stream:这是请求的目标地址:

这条命令的作用是:通过 curl 工具,向你本地(Mac)3000 端口上运行的服务发送一个 HTTP GET 请求,请求 /stream 路径,并传递参数 question=hello,通常用于测试本地服务是否能正常接收并响应这个请求(比如返回对应的流式数据)。

结果还是返回的 data: Error fetching from OpenAI

接着测试是不是这里的问题

curl -X POST "<https://api.deepseek.com/v1/chat/completions>" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer sk-4357082a0f464a31b****" \ -d '{ "model": "deepseek-chat", "messages": [{"role": "user", "content": "hello"}], "stream": false }'

这条命令是通过 curl 工具向 DeepSeek 公司的聊天模型 API 发送一个 POST 请求,目的是调用其 AI 模型获取对 "hello" 这个问题的回复。

curl:命令行数据传输工具,这里用于发送 HTTP 请求。

-X POST:指定请求方法为 POST(常用于向服务器提交数据)。

"https://api.deepseek.com/v1/chat/completions" :请求的目标地址,是 DeepSeek 提供的聊天补全 API 接口(类似 OpenAI 的 chat completions 接口)。

这条命令的作用是:用你的 DeepSeek API 密钥,调用其聊天模型,发送 “hello” 这个问题,并请求模型返回一个完整的回复(非流式)。执行后,终端会显示 API 返回的 JSON 格式结果,其中包含模型对 “hello” 的回应内容。

{"id":"2aed94b6-0aa7-44f5-a0ed-263ccda0d725","object":"chat.completion","created":1760164439,"model":"deepseek-chat","choices":[{"index":0,"message":{"role":"assistant","content":"Hello! 👋 How can I help you today?"},"logprobs":null,"finish_reason":"stop"}],"usage":{"prompt_tokens":5,"completion_tokens":11,"total_tokens":16,"prompt_tokens_details":{"cached_tokens":0},"prompt_cache_hit_tokens":0,"prompt_cache_miss_tokens":5},"system_fingerprint":"fp_ffc7281d48_prod0820_fp8_kvcache"}

这个得到的结果是正确的 那么我们就可以知道,问题已经解决!之前返回 "data: Error fetching from OpenAI" 的原因是: 缺少 Content-Type 头 :原始代码中 fetch 请求缺少 Content-Type: application/json 头部

Content-Type: application/json 告诉服务器我们发送的 请求体 是 JSON 格式的数据。这个头部是用于:

请求体格式声明 :告诉 DeepSeek API 我们发送的数据是 JSON 格式,
API 要求 :大多数现代 REST API 都要求明确指定请求体的内容类型