使用PGlite返回JSON字符串给Gleam Lustre时遇UnexpectedByte错误
问题根源与解决办法
核心问题:异步逻辑未正确返回结果
你的getData函数存在异步处理错误,这才是导致Gleam Lustre解析JSON时报Error {0: UnexpectedByte}的真正原因,和jsonResult.rows的格式无关:
pg.query()是异步操作,返回Promise,但你的函数既没有等待异步操作完成,也没有返回Promise对象。- 当前函数执行结束后会默认返回
undefined,而非你在then回调里返回的JSON字符串。Gleam Lustre尝试解析undefined(转成字符串是"undefined"),这显然不是合法JSON,因此抛出解析错误。
修正后的代码
把getData改成异步函数,正确返回包裹着JSON字符串的Promise:
export async function getData() { try { const jsonResult = await pg.query(`SELECT * FROM test;`); const jsonString = JSON.stringify(jsonResult.rows); console.log(jsonString); return jsonString; } catch (error) { console.error("查询或JSON转换错误:", error); // 返回合法的空数组JSON作为降级处理,避免Gleam解析失败 return "[]"; } }
补充说明
- 你原代码里的
try/catch完全多余,jsonResult.rows是PGlite返回的结果对象,不是JSON字符串,根本不会抛出解析错误。 - 返回
sampleData时函数是同步返回合法JSON字符串,所以Gleam能正常处理;但用异步查询时,原函数没返回正确结果,才导致解析失败。
内容的提问来源于stack exchange,提问作者jwesonga
相关产品推荐
相关产品推荐

