Next.js 14.1.4中DELETE请求params未定义问题咨询
问题原因及解决方案
你的问题出在DELETE函数的参数签名错误,和HTTP方法本身无关——Next.js的DELETE请求完全可以和GET一样读取params。
对比两个接口的参数就能发现问题:
- GET函数的参数是
(response: NextResponse, {params} : {params: {id: string}}),虽然第一个参数命名成response是错误的(实际应为Request对象),但你正确地从第二个上下文参数中解构了params,所以能拿到id。 - DELETE函数只写了
({params} : {params: {id: string}}),相当于尝试从第一个Request对象中解构params,但Request对象里根本没有这个属性,自然会抛出Cannot read properties of undefined (reading 'id')的错误。
修正后的DELETE接口代码
把DELETE函数的参数改成和GET一致的结构即可:
import { NextResponse } from 'next/server'; import prisma from '@/lib/prisma'; // 请替换为你实际的prisma实例路径 export async function DELETE(request: Request, {params} : {params: {id: string}}) { try { const loanToDelete = await prisma.loan.findUnique({ where: { id: parseInt(params.id) } }) if (!loanToDelete) { return NextResponse.json({message: "Loan not found"}, {status: 404}) } await prisma.loan.delete({ where: {id: loanToDelete.id} }) return NextResponse.json({message: "Loan successfully deleted"}, {status: 200}) } catch (error) { console.error(error) return NextResponse.json({message: "An error occurred"}, {status: 500}) } }
补充说明
Next.js App Router的API路由中,所有HTTP方法(GET/POST/PUT/DELETE等)的函数签名都是统一的:
async function METHOD(request: Request, context: { params: YourParamsType }) { // 业务逻辑 }
- 第一个参数是当前请求的
Request对象,包含请求头、请求体等信息 - 第二个参数是上下文对象,里面的
params就是路由中定义的动态参数(比如/api/loans/[id]里的id)
你之前的GET函数只是碰巧参数顺序写对了(虽然第一个参数命名错误),所以能正常工作;而DELETE函数参数结构写错了,导致无法读取params。
内容的提问来源于stack exchange,提问作者Anthony Garcia
相关产品推荐
相关产品推荐

