我对 TypeScript 的使用还很陌生,并且了解类型提示的强大概念。但这可能有点让人不知所措。我在使用express的TypeScript项目中使用Prisma ORM,并且在使用findUnique方法的结果时遇到一些问题。让我解释一下。
我创建了一个简单的用户模型:
// prisma/schema/user.prisma
model User {
id String @id @default(cuid())
firstname String
lastname String
email String @unique
password String
salt String?
sessionToken String? @unique
}
然后我有一个帮助程序文件,可以执行所有需要的操作,例如获取用户、创建等。让我们以通过电子邮件检索用户的函数为例。
// src/helpers/users.ts
export const getUserByEmail = (email: string) => prisma.user.findUnique({
where: { email },
})
最后,我有一个执行登录操作的控制器,在这个文件中,我通过电子邮件检索用户并检查密码哈希
// src/controllers/authentication.ts
export const login = async (req: express.Request, res: express.Response) => {
try {
const { email, password } = req.body
if (!email || !password) {
res.sendStatus(HttpStatus.BAD_REQUEST)
}
let user = await getUserByEmail(email)
if (!user) {
return res.sendStatus(HttpStatus.BAD_REQUEST)
}
const expectedHash = authentication(user.salt, password)
// ...
return res.status(HttpStatus.OK).json(user).end()
} catch (error) {
console.error(error)
return res.sendStatus(HttpStatus.BAD_REQUEST)
}
}
所以,我的问题就在这里:
user.salt
,因为我得到未解决的可变盐。我试图告诉我我想要一个用户作为响应,但没有成功。
import { User } from '@prisma/client'
// ...
let user: User | null = await getUserByEmail(email)
但是我有一个很长的错误,说初始化程序类型 Prisma__UserClient<$Result.GetResult
我对这种带有很多子类型和/或变量的长类型有点困惑,它可能很简单,但现在我迷路了。你能解释一下我错过了什么吗?
这应该有效:
// src/helpers/users.ts
export const getUserByEmail = (email: string) => prisma.user.findUnique({
where: { email },
include: { salt: true }
});