javascript - 棱镜 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
}
解决方案
您收到此错误的原因是email
您的 PrismaSignup
模型中的字段不是唯一的。查询中的where
选项findUnique
仅接受模型的唯一字段。这样做是为了确保查询只能指定一条记录findUnique
。如果您有兴趣了解更多信息,Prisma Client API 参考对这种行为进行了深入的解释。
要解决该错误,email
请在 Prisma Schema 文件中使该字段唯一。更新后的Signup
模型应如下所示:
model Signup {
id Int @id @default(autoincrement())
email String @unique
password String
}
推荐阅读
- c# - VSTO Excel 加载项在用于签名的证书到期日期后不起作用
- angular - 命名路由器出口导致 Angular 11 应用程序中出现“无法匹配任何路由”错误
- java - 处理未检测到死苍蝇
- python - 我在使用 word2vec 时遇到了问题。可能是版本问题,不知道怎么解决?
- javascript - 使用正则表达式获取一个单词后的美元金额
- java - 我的应用程序正在将 Db 实体序列化到 Web 服务层。如何全部转为 DTO?
- flutter - 出现错误:框
' 不能分配给参数类型 'ValueListenable ' - javascript - 根据嵌套数组值更改值
- amazon-web-services - 从 GCP 或 Azure 访问 AWS 资源 (aws xray)
- reactjs - 渲染数组的每个对象,这是反应中键的值