Next.js DELETE接口params对象始终为undefined问题求助
解决Next.js App Router中DELETE接口无法获取路径params的问题
你遇到的问题是因为Next.js App Router的API路由函数参数结构和Pages Router不同,直接解构{ params }的写法不正确。
修正后的代码
import { NextResponse } from "next/server"; import prisma from "../../../../../prisma/client"; // 正确的参数结构:第一个是request对象,第二个是包含params的上下文对象 export async function DELETE(request, { params }) { console.log('Params:', params); const id = params?.id; console.log('ID:', id); // 先判断id是否存在 if (!id) { return NextResponse.json({ error: "Missing issue ID" }, { status: 400 }); } try { const issue = await prisma.issue.findUnique({ where: { id: parseInt(id) } }); if (!issue) { return NextResponse.json({ error: "Invalid issue" }, { status: 404 }); } await prisma.issue.delete({ where: { id: issue.id }, }); return NextResponse.json({}); } catch (error) { console.log(error); return NextResponse.json({ status: "Fail" }, { status: 500 }); } }
关键修改点
- 路由函数参数改为
DELETE(request, { params }):params是从第二个上下文参数中解构出来的,而非直接作为第一个参数的属性 - 增加了
id存在性判断,避免后续parseInt时出现错误
额外检查项
- 确认你的API路由文件结构为
app/api/issues/[id]/route.js:必须用[id]命名文件夹,Next.js才能识别动态路径参数 - 重启Next.js开发服务器:路由结构变更后需要重启才能生效
- 验证Postman请求URL无误:确保是
http://localhost:3000/api/issues/2,没有拼写错误
内容的提问来源于stack exchange,提问作者Nozibul Islam
相关产品推荐
相关产品推荐

