在我的Next.js项目中,我有main/app/api/worker-callback/route.ts
文件:
import { NextApiResponse } from "next";
import { NextResponse } from "next/server";
type ResponseData = {
error?: string
};
export async function POST(req: Request, res: NextApiResponse<ResponseData>) {
if (req.headers.get('Authorization') !== process.env.BACKEND_SECRET!) {
res.status(403).json({ error: "Allowed only by backend" });
// return Response.json({ error: "Allowed only by backend" }, { status: 403 });
}
return NextResponse.json({});
}
字符串
但是当我查询它的时候,我得到了错误404。为什么?
curl -d '' -v -o/dev/null -H "accept: application/json" http://localhost:3000/api/worker-callback
...
< HTTP/1.1 404 Not Found
...
型
请注意,main/app
中的HTML页面工作得很好,我用cd main && next build
命令构建它。
6条答案
按热度按时间ldfqzlk81#
问题似乎是你发送的是GET请求而不是你在API中定义的POST。你可能想添加
-X POST
来发送POST请求。mrwjdhj32#
可能的问题:
1.路由配置:确认
main/app/api/worker-callback/route.ts
文件位于正确的目录(pages/api
IIRC)中,以便Next.js将其识别为API路由。1.函数导出:您可能需要尝试导出为默认值(
export default async function...
),而不是命名的POST导出。还要仔细检查服务器是否正在运行,URL是否正确,
next build
是否正确完成。6qfn3psc3#
根据您在问题中提供的代码片段,路由处理程序似乎存在许多问题:
res
参数。NextResponse
类型的promise。return
关键字字符串
我已经在本地测试了我的代码片段,通过添加我提出的更改,它将按照预期工作。我强烈建议您阅读route handlers上的文档,因为它们更改了很多。
w3nuxt5m4#
字符串
n3schb8v5#
您是否从正确的根文件夹运行了构建脚本?
3lxsmp7m6#
API route文件名应该与它处理的HTTP方法匹配,例如
get.ts
、post.ts
、put.ts
等。但是,在您的代码中,您使用route.ts
作为文件名,这不是有效的HTTP方法。这可能会导致Next.js
无法将该文件识别为API路由并返回404错误。要解决这个问题,您需要为API路由使用正确的文件名。您应该将
route.ts
文件重命名为post.ts
,因为您在代码中处理的是POST方法。例如,可以使用以下命令重命名文件:
字符串
然后,您可以使用与之前相同的URL查询API路由:
型
如果请求被授权,您应该得到200 OK响应,如果请求未被授权,则应该得到403 Forbidden响应。