Replit运行Discord账号生成器报Unexpected token < in JSON错误如何解决?
报错原因
- 核心原因是代码预期服务端返回JSON格式响应,但实际收到的是HTML页面内容(开头为
<!DOCTYPE HTML>),调用JSON.parse解析失败抛出异常,未捕获的异常直接导致进程退出。 - 你当前使用的
hastebin-save库是为hastebin类文本存储服务设计的,但你配置的目标服务是ouo.io,两者接口规则完全不兼容:ouo.io是短链接服务,不支持当前请求的POST格式,返回的是报错页/首页的HTML内容,而非JSON格式的上传结果。 - 代码缺少基础容错逻辑:没有判断HTTP响应状态码,也没有对JSON解析操作做异常捕获,只要服务端返回非JSON内容就会直接崩溃。
- 请求头设置与上传内容不匹配:你指定了
Content-Type: application/json,如果req.write传入的text不是合法JSON格式,服务端也会返回错误HTML页。
解决方案
- 调整服务选型:ouo.io不支持直接上传文本内容获取访问链接,你需要先把生成的账号数据上传到支持文本存储的服务(如自建hastebin、pastebin类服务、对象存储等),再将生成的文本访问链接提交到ouo.io生成短链。
- 给upload.js添加强容错逻辑,修改回调部分代码如下:
clb.on("end", () => { // 先校验HTTP响应状态码 if (clb.statusCode < 200 || clb.statusCode >= 300) { return callbackFunction(new Error(`请求失败,状态码:${clb.statusCode}`)); } // 捕获JSON解析异常 try { const resData = JSON.parse(data); callbackFunction(null, resData.key); } catch (parseErr) { callbackFunction(new Error(`解析响应失败,返回内容非JSON:${data.slice(0, 200)}`)); } });
- 调用上传方法时必须处理回调返回的错误,避免未捕获异常导致进程崩溃。
- 如果你确实要对接ouo.io接口,需参照其官方API规则调整请求方法、请求头、参数格式,不能直接复用hastebin的上传逻辑。
内容的提问来源于stack exchange,提问作者MashedPotato
相关产品推荐
相关产品推荐

