无效的prisma.user.findUnique()调用



我似乎找不到调用中的错误是

function findUser(req, res) {
const username = req.body.username;

prisma.user.findUnique({
where: { username: username },
select: { username: true }
})
.then(data => {
res.send({
'userExists': data ? true : false
})
})
.catch(err => {
res.status(500).send({
message: err.message || "Some error occurred while retrieving user."
})
})
.finally(async () => { await prisma.$disconnect()});
// schema.prisma
datasource db {
provider = "postgresql"
url      = env("DATABASE_URL")
}
generator client {
provider = "prisma-client-js"
}
model User {
id Int @default(autoincrement()) @id
username String @unique
password String
salt String
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}

从Prisma方面来看,一切都很好。问题可能是req.body.username,如果未定义,则会收到Invalid 'prisma.user.findUnique()' invocation
您必须添加用户名验证,即

if {typeof username !== string} return res.status(404).send('invalid username')

这可能是延迟响应。我也遇到了同样的问题。但文件拯救了我的一天。https://www.prisma.io/docs/reference/api-reference/prisma-client-reference#findunique

您只需要将@unique属性添加到schema.prisma中的username字段中,如下所示--

username String @unique @db.VarChar(255)

查看您的代码后,您的req.body中似乎缺少用户名。我建议您始终验证要从req.body中提取的params。我将您的代码重构为es6。

这是你可以尝试的更新代码,

function findUser(req, res) {
// Destructure username from req.body
const { username } = req.body;
if(username == null) throw new Error('Username undefined');

// when property and value is same, you can write 'username' like below
prisma.user.findUnique({
where: { username },
select: { username: true }
})
.then(data => {
res.send({
'userExists': data ? true : false
})
})
.catch(err => {
res.status(500).send({
message: err.message || "Some error occurred while retrieving user."
})
})
.finally(async () => { await prisma.$disconnect()});

最新更新