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

Next.js 13服务端组件Fetch异常类型转换问题求助

Next.js 13服务端组件Fetch数据时字段类型异常转换问题

在Next.js 13的服务端组件中调用Fetch获取数据时,返回结果出现部分字段类型异常转换:id、price字段保持数字类型,但Prisma中声明为Float类型的bialko和kcal字段被转换为字符串类型。将数据库字段类型从decimal改为double precision后,API端点返回的数据完全符合预期,但服务端组件的Fetch仍存在该问题。

已尝试的操作

  • 重新创建整个数据库、修改列类型,将numeric改为double precision
  • 执行npx prisma generate、prisma migrate,删除迁移文件

后端API代码

export async function GET(request: Request) {
    const zestawyWo = await prisma.rankings.findMany({
        where: {},
        select: {
            id: true,
            price: true,
            bialko: true,
            kcal: true,
        },
    })

    if (zestawyWo.length == 0) {
        return NextResponse.json(
            {error: "zestawyWo not found"},
            {
                status: 404,
            }
        )
    }

    console.log(typeof zestawyWo[0].bialko)
    console.log(typeof zestawyWo[0].price)
    console.log(zestawyWo)

    return NextResponse.json(zestawyWo, {
        status: 200,
    })
}

服务端组件Fetch代码

async function fetchAllZestawy(orderby?: string): Promise<Zestaw[]> {
    const res = await fetch(`http://localhost:3000/api/zestawywo`)
    const data: Zestaw[] = await res.json()
    console.log(typeof data[0].bialko)    // string
    console.log(data)   //  result pasted below
    return data
}

客户端组件测试代码

useEffect(() => {
        ;(async () => {
            const res = await fetch("http://localhost:3000/api/zestawywo")
            const result = await res.json()
            console.log("CLIENT", result)
        })()

补充说明

客户端组件中调用Fetch时,所有字段类型均正常(bialko和kcal返回数字类型),推测问题出在Next.js的服务端Fetch逻辑上。

预期返回数据

{
    "id": 8,
    "price": 31.9,
    "bialko": 58.2,
    "kcal": 1581
}

实际获取数据

{
    "id": 8,
    "price": 31.9,
    "bialko": "58.2",
    "kcal": "1581"
}

内容的提问来源于stack exchange,提问作者RETOVSKEJ

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.25 01:37:48