You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 05:35:04