首页 > 解决方案 > 棱镜 findUnique 与 where 引发错误

问题描述

我正在尝试在 ExpressJS 和 Prisma 中创建 Singup API。

我正在检查我的数据库中是否存在给定的电子邮件。当我传递电子邮件和密码时,它会引发 Unknown arg email in where.email for type SignupWhereUniqueInput. Did you mean id? Available args:错误。

我尝试使用 select: { email: true, password: true } 但它不起作用。只有当我传递身份证号码而不是电子邮件时,代码才有效。任何想法这里有什么问题?

router.post(`/signup`, async (req, res) => {
  const { email, password } = req.body;

  const hashPassword = await bcrypt.hash(password, 10);

  const checkEmail = await prisma.signup.findUnique({
    where: {
      email: email
    }
  });

  if (checkEmail) {
    return res.status(400).json({
      error: "Pick different one"
    });
  }
  const userSignUp = await prisma.signup.create({
    data: {
      email,
      password: hashPassword
    }
  });

  return res.json(userSignUp);
});

// DB Schema
model Signup {
  id       Int    @id @default(autoincrement())
  email    String
  password String
}

标签: javascriptnode.jsexpressprisma

解决方案


您收到此错误的原因是email您的 PrismaSignup模型中的字段不是唯一的。查询中的where选项findUnique仅接受模型的唯一字段。这样做是为了确保查询只能指定一条记录findUnique。如果您有兴趣了解更多信息,Prisma Client API 参考对这种行为进行了深入的解释。

要解决该错误,email请在 Prisma Schema 文件中使该字段唯一。更新后的Signup模型应如下所示:

model Signup {
  id       Int      @id @default(autoincrement())
  email    String   @unique      
  password String 
}

推荐阅读