如何解决GraphQL 如何在 node.js 中将服务器错误与客户端错误最好使用 TryCatch 块分开?
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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。