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

Prisma创建articles时报TypeError:payload应为对象却收到null

解决Next.js POST接口创建Prisma articles模型时的"payload must be object"错误

错误原因分析

你遇到的TypeError: The "payload" argument must be of type object. Received null错误,核心是请求未提供有效JSON Body,或Prisma创建数据时传入的data参数存在类型/格式问题。结合你创建dealerships实体无异常的情况,重点排查以下几点:

解决方案步骤

1. 先确保请求Body的有效性

在接口代码中增加对body空值的判断,避免后续逻辑处理无效数据:

export async function POST(req: Request) {
  try {
    let body;
    // 捕获JSON解析失败的情况
    try {
      body = await req.json();
    } catch (err) {
      return NextResponse.json(
        { error: '请求格式错误,需传入有效的JSON' },
        { status: 400 }
      );
    }

    // 判断body是否为null或空对象
    if (!body || Object.keys(body).length === 0) {
      return NextResponse.json(
        { error: '请求Body不能为空' },
        { status: 400 }
      );
    }

    console.log('Body recibido:', body);

    // 原有必填字段验证
    if (!body.type || !body.brand || !body.model) {
      return NextResponse.json(
        { error: 'Todos los campos son obligatorios' },
        { status: 400 }
      );
    }

    // ...后续创建逻辑
  } catch (error) {
    console.error('Error:', error);
    return NextResponse.json(
      { error: 'Error al registrar el artículo' },
      { status: 500 }
    );
  }
}

测试请求时注意:

  • 必须设置请求头Content-Type: application/json
  • 使用raw JSON格式发送请求,不要用form-data、x-www-form-urlencoded等格式

2. 避免直接扩展未知Body字段到Prisma数据

直接使用...body可能引入Prisma模型未定义的字段,或字段类型不匹配(比如Decimal字段传入字符串)。改为显式指定字段,确保类型匹配:

const article = await prisma.articles.create({
  data: {
    type: body.type,
    brand: body.brand,
    model: body.model,
    year: body.year ? Number(body.year) : undefined, // 确保year为数字类型
    vin: body.vin,
    registration_number: body.registration_number,
    purchase_price: body.purchase_price ? parseFloat(body.purchase_price) : undefined, // Decimal字段需传入数字
    selling_price: body.selling_price ? parseFloat(body.selling_price) : undefined,
    maintenance_needed: body.maintenance_needed ? parseFloat(body.maintenance_needed) : undefined,
    maintenance_done: body.maintenance_done ? parseFloat(body.maintenance_done) : undefined,
    condition: body.condition,
    description: body.description,
    maintenance_date: body.maintenance_date ? new Date(body.maintenance_date) : undefined, // 确保为Date类型
    dealership_id: 'd9078ca9-4d6e-4d0e-a60d-dabbb3c8e5c2',
  },
});

3. 刷新Prisma客户端缓存

执行npx prisma db push后,可能存在客户端未同步模型的情况,重新生成客户端:

npx prisma generate

额外验证点

  • 确认测试用的dealership_id对应的记录确实存在于数据库中
  • 检查日志中的Body recibido输出,确认收到的JSON结构符合预期

内容的提问来源于stack exchange,提问作者Luciano Balbiano

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.16 00:04:55