wrangler dev运行正常,wrangler publish报Unexpected token p JSON解析错误
问题根因说明
Unexpected token p in JSON at position 0 错误的核心是客户端预期接收JSON格式响应,但Cloudflare线上实际返回的是非JSON内容,且内容第一个字符为p,通常为Cloudflare默认报错文本(如proxy error、page not found)的开头字符。
排查步骤
- 首先打印完整响应内容:临时关闭客户端的自动JSON解析逻辑,直接在浏览器访问线上API地址,或执行
curl -v 你的线上API地址查看完整返回内容,可直接定位是Cloudflare平台报错还是Worker代码返回异常。 - 检查路由匹配规则:核对
wrangler.toml文件中的routes配置是否与你访问的域名路径完全匹配。本地wrangler dev默认全路径匹配,线上如果路由缺少通配符(如漏写/*后缀)会导致请求未进入自定义Worker逻辑,直接返回Cloudflare默认报错页。 - 添加入口异常兜底:给Worker的fetch入口添加全量try catch捕获,确保所有运行异常都返回JSON格式内容,避免Cloudflare注入默认文本报错:
export default { async fetch(request, env, ctx) { try { // 原有业务逻辑 return new Response(JSON.stringify({code: 0, data: "success"}), { headers: { "Content-Type": "application/json" } }) } catch (err) { // 异常统一返回JSON格式 return new Response(JSON.stringify({code: 500, error: err.message}), { status: 500, headers: { "Content-Type": "application/json" } }) } } }
- 核对线上绑定配置:确认线上Worker已配置和本地一致的环境变量、KV命名空间、R2存储、D1数据库等绑定项,本地
.dev.vars的配置不会自动同步到线上,缺失绑定会触发运行时未定义报错。 - 查看实时运行日志:进入Cloudflare控制台对应Worker的「日志」页面,开启实时日志后重新发起请求,可看到完整的执行栈、报错信息,直接定位代码执行异常点。
常用修复方案
- 路由匹配错误的话,将
wrangler.toml的routes值修改为你的域名/*,重新执行wrangler publish即可。 - 所有返回响应显式设置
Content-Type: application/json响应头,避免Cloudflare自动修改内容类型。 - 补齐线上缺失的环境变量、资源绑定项后重新发布。
内容的提问来源于stack exchange,提问作者Yuri Chen
相关产品推荐
相关产品推荐

