问题描述
try {
const res = await UserModel.findOne({username: username})
if (res === null) {
throw new Error("Your username or password was incorrect USERNAME")
}
const passwordValid = await bcrypt.compare(password,res.hash);
if (!passwordValid) {
throw new Error("Your username or password was incorrect PASSWORD")
} else {
console.log("res is: ",res)
const convertBalanceToNum = {
...res._doc,balance: res.balance.toString()
}
console.log("converted balance is: ",convertBalanceToNum)
return convertBalanceToNum
}
} catch (error) {
console.error(error)
throw new Error("Unable to verify password due to server error")
}
我想将客户端错误(例如客户端提供错误的用户名或密码组合)与不涉及客户端提供错误信息的服务器错误分开。
理想情况下,throw new Error
块中的 Try
语句用于客户端错误,而 Catch
块中的语句用于服务器错误。
但是当错误的用户名或密码组合被触发时,catch 块而不是 try 块内的错误语句被触发
这是有道理的,但现在我对如何在 GraphQL 中实现特定于服务器的错误感到困惑,有什么帮助吗?
编辑:我知道我可以将 catch 语句中的错误参数分配给 throw new Error 而不是那个字符串,但我担心它可能会在我没有考虑的情况下给出敏感信息。>
解决方法
我自己对 GraphQL 有点陌生,我想出了一个临时解决方案,向 UserType
添加 2 个字段,一个称为 GraphQLInt 类型的 statusCode
,另一个是 {{1 }} GraphQLString 类型,然后这样返回数据:
serverMessage