运行服务器操作查找我没有要求它的数据(Prisma / MongoDB / Next14)

Running into a server action looking for data I am not asking it to (Prisma / MongoDB / Next14)

提问人:Coleb 提问时间:10/31/2023 更新时间:10/31/2023 访问量:50

问:

我最近开始使用 Next14,就像我假设的其他人一样,并且在尝试创建一个非常简单的对象以推送到数据库中的“Decision”集合时遇到了错误。我的服务器操作显然不是在代码库中寻找 id 参数,因为它应该使用 Prisma Schema 中的 @map() 函数在服务器端自动生成。

我正在使用: 下一页 14.0.1 棱镜 5.5.2 Shadcn 用户界面

这是我在提交表单时遇到的错误:错误消息

这是我的架构:

model Pros {
  id         String    @id @map("_id") @db.ObjectId
  createdAt  DateTime  @default(now()) @map("created_at")
  updatedAt  DateTime  @updatedAt @map("updated_at")
  title      String
  weight     Int
  decision   Decision? @relation(fields: [decisionId], references: [id])
  decisionId String    @map("decision")
}

model Cons {
  id         String    @id @map("_id") @db.ObjectId
  createdAt  DateTime  @default(now()) @map("created_at")
  updatedAt  DateTime  @updatedAt @map("updated_at")
  title      String
  weight     Int
  decision   Decision? @relation(fields: [decisionId], references: [id])
  decisionId String?   @map("decision")
}

model Decision {
  id        String   @id @map("_id") @db.ObjectId
  createdAt DateTime @default(now()) @map("created_at")
  updatedAt DateTime @updatedAt @map("updated_at")
  title     String
  pros      Pros[]
  Cons      Cons[]
}

这是我的服务器操作:

import prisma from "@/lib/prisma"

export const addDecision = async (formData) => {

  await prisma.decision.create({
    data: {
      title: formData.get("title"),
    },
  })
}

最后,这是表单的 UI:

'use client'
import {
  Dialog,
  DialogContent,
  DialogDescription,
  DialogHeader,
  DialogTitle,
  DialogTrigger,
} from "@/components/ui/dialog"
import { addDecision } from "@/lib/actions"

export default function AddDecision({ children }) {
  return (
    <Dialog>
      <DialogTrigger>Open</DialogTrigger>
      <DialogContent>
        <DialogHeader>
          <DialogTitle>Are you sure absolutely sure?</DialogTitle>
          <DialogDescription>
            <form action={addDecision}>
              <input name="title" placeholder="title" />
              <input type="submit" value="Submit" />
            </form>
          </DialogDescription>
        </DialogHeader>
      </DialogContent>
    </Dialog>
  )
}

我试过: 1.) 从架构中的 id 中删除 @map(Prisma 讨厌这一点) 2.) 添加 const { title } = formData;服务器操作的正上方 3.) 拔掉我不存在的头发

如果有人能为我指出正确的方向,我将不胜感激。

谢谢!

JavaScript MongoDB Next.js Prisma 服务器操作

评论


答: 暂无答案