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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...