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
相关产品推荐
相关产品推荐

