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

使用Next.js时Prisma存储数组自动加引号报错问题

解决Prisma存储数组时传入字符串的问题

问题根源:你从formdata获取的genre和tag并不是真正的数组,而是数组格式的字符串(比如"['hello', 'world!']"),控制台打印时看起来像数组,但实际类型是string,而Prisma schema定义的是String[]类型,所以触发类型错误。

解决步骤:

  1. 解析字符串为数组
    由于拿到的字符串用单引号包裹元素,而JSON只识别双引号,所以先替换单引号为双引号,再用JSON.parse转成真正的数组:

    const genreStr = formdata.genre;
    const genre = typeof genreStr === 'string' 
      ? JSON.parse(genreStr.replace(/'/g, '"')) 
      : genreStr;
    
    const tagStr = formdata.tag;
    const tag = typeof tagStr === 'string' 
      ? JSON.parse(tagStr.replace(/'/g, '"')) 
      : tagStr;
    
  2. 添加类型校验(可选)
    为避免解析失败,可添加简单校验,确保最终是数组:

    // 校验genre是否为数组,不是则设为空数组或抛出错误
    const finalGenre = Array.isArray(genre) ? genre : [];
    const finalTag = Array.isArray(tag) ? tag : [];
    
  3. 更新Prisma调用
    用解析后的数组传入Prisma:

    const result = await prisma.items.update({
      where: { id: id },
      data: {
        genre: finalGenre,
        tag: finalTag
      }
    });
    

额外优化建议(前端层面)

如果是前端表单提交导致的数组被序列化为字符串,可在提交时直接发送JSON格式数据:

// 前端提交示例
fetch('/api/update-item', {
  method: 'POST',
  headers: { 'Content-Type': 'application/json' },
  body: JSON.stringify({ genre: ['hello', 'world!'], tag: ['hello', 'world!'], id: 1 })
});

后端用req.json()接收,就能直接拿到数组类型的数据,无需额外解析。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 09:51:07