next.js 13奇怪的类型转换?Res.json () number to string



我有奇怪的问题,无论我做什么,取的结果,是半飞转换为字符串。(id,price保持为number, bialko/kcal转换为String,但它们都在prisma中声明为Float)。在将类型从十进制更改为双精度后,api端点将完全按照我的意愿返回对象。但是fetch做了一些我不理解的事情。重要的是要知道,我正在服务器组件中获取!

What i tried:-重建整个数据库,改变列,改变数据类型从数字到双精度-npx棱柱体生成,棱柱体迁移,删除迁移

后端代码:

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,
})
}

组件代码:

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
}
编辑:尝试在客户端组件中获取数据,一切都正常工作(返回kcal和bialko作为一个数字)。似乎有一些奇怪的事情发生在next.js FETCH.
useEffect(() => {
;(async () => {
const res = await fetch("http://localhost:3000/api/zestawywo")
const result = await res.json()
console.log("CLIENT", result)
})()

CONSOLE.log显示需要读取的数据

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

CONSOLE.log OF fetcheddata

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

您不应该为每个方法创建和导出一个函数。您应该尝试以下操作:

import { NextApiRequest, NextApiResponse } from "next";
export default function handler(req: NextApiRequest, res: NextApiResponse) {
// your db logic
res.status(200).json(zestawyWo);
}

如果你想为每个方法提供不同的回调,你可以这样做:

export default function handler(req: NextApiRequest, res: NextApiResponse) {
switch (req.method) {
case "GET": GET(),
case "POST": POST(),
// ...others methods
}
}

更多信息:https://nextjs.org/docs/api-routes/introduction

这样说很疯狂,但是通过在获取url中将localhost更改为127.0.0.1来解决问题。

const res = await fetch('http://127.0.0.1:3000/api/zestawywo')

Next.js确实有一些问题与它的fetch,因为我解决了意外通过解决另一个错误,对于相同的方法工作:TypeError: fetch failed in server componant

最新更新