我在使用 vercel 无服务器函数时遇到问题,因为我收到以下错误:
美术路线来袭!
error SyntaxError: Unexpected end of JSON input
at JSON.parse ()
at parseJSONFromBytes (node:internal/deps/undici/undici:6571:19)
at successSteps (node:internal/deps/undici/undici:6545:27)
at node:internal/deps/undici/undici:1211:60
at node:internal/process/task_queues:140:7
at AsyncResource.runInAsyncScope (node:async_hooks:203:9)
at AsyncResource.runMicrotask (node:internal/process/task_queues:137:8)
at process.processTicksAndRejections (node:internal/process/task_queues:95:5)
尝试在下一个项目(应用程序路由器、/api 文件夹)的路由处理程序中调用 wait req.json() 时会发生此错误。
这些路由在我的本地计算机上运行良好,并且请求以正确的格式发送。我将此应用程序部署为另一个平台上的长期运行服务,并且当我在那里路由请求时也没有问题 - 这让我相信我的 vercel 设置存在问题。
// imports..
export async function POST(req: NextRequest) {
console.log("artwork route hit!"); // this is logged
if (!req.body) {
console.log("no body found") // this is not logged
return new NextResponse("No request body found", { status: 401 });
}
const job: Job = await req.json();
console.log(`new job parsed: ${job.id}`) // this is not logged
如前所述,此错误仅发生在 vercel 函数中。在本地并部署在其他地方,代码按预期运行(找到主体,函数可以解析它并继续)。因此,我很难诊断为什么这个运行时在 req.json() 方面遇到问题。
我还可以注意到,Next 项目的中间件会在这些请求成功之前触发。我想知道他们是否会以某种方式剥去尸体?尽管我再次发现这很难诊断,因为设置与本地主机中的节点相同并且在线托管没有任何问题。
预先感谢您的帮助。
我也遇到同样的问题; Next-14 APP 路由器处理程序设置略有不同。问题是一样的。
JSON 有时无缘无故地缺少最后一个“}”。本地环境测试通过没有问题。
{"type":"content_block_delta","index":0,"delta {"type":"text_delta","text":"Hello"
我使用递归 while 函数,当末尾的“}”的数量低于某个数字时,将“}”添加到字符串的末尾。这可能是 NEXT.JS 系统 API 处理的结果。
希望有帮助!