You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 18:12:19