Reactjs 反应阿波罗错误仅显示状态代码500

Reactjs 反应阿波罗错误仅显示状态代码500,reactjs,graphql,apollo,react-apollo,Reactjs,Graphql,Apollo,React Apollo,我想知道如何使用react apollo访问前端的投掷错误 我用于获取单个客户的简单解析器如下所示,其中args.\u id是客户id。现在,如果id无效,apollo只会抛出一个500错误 错误!网络错误:响应不成功:收到状态代码 五百 我尝试使用errorPolicy=“all”并访问error.graphQLErrors,但这不起作用,因为它会抛出500个错误 无法读取未定义的属性“graphQLErrors” 要捕获apollo抛出的错误,您需要将执行查询的调用包装为try-catch

我想知道如何使用react apollo访问前端的投掷错误

我用于获取单个客户的简单解析器如下所示,其中
args.\u id
是客户id。现在,如果id无效,apollo只会抛出一个500错误

错误!网络错误:响应不成功:收到状态代码 五百

我尝试使用errorPolicy=“all”并访问error.graphQLErrors,但这不起作用,因为它会抛出500个错误

无法读取未定义的属性“graphQLErrors”


要捕获apollo抛出的错误,您需要将执行查询的调用包装为
try
-
catch

在您的示例中,这可能是:

try {
    const customer = await Customer.findById(args._id);
} catch(err) {
    // handle the error
}
但是
500
始终是编程错误,应在服务器上修复。在使用查询中传递的参数之前,您的服务器似乎没有执行所需的验证。

编辑(除了包装在try/catch中)-也许您应该在向服务器发送请求之前检查\u id是否有效:

customer: async (args, req) => {
    // do some validation on _id
    if (args._id && isValid(args._id) ) {
        try {
            const customer = await Customer.findById(args._id)
        } catch (e) {
          // handle server error
        }
    } else {
       // handle invalid _id here
    }

您建议我如何检查ID是否为现有文档?我正在使用Mongoose,当使用Graphiql时,会收到错误消息。但是当使用Apollo客户端时,我只得到网络错误。我需要与服务器检查_id是否有效?所以我认为,
if(!customer)
并在无效时抛出一个错误会起作用吗?否-因为在您检查
if时已经抛出了错误(!customer
-这就是为什么您需要将其包装在try/catch中。如果您需要将其发送到服务器进行检查,则忽略上述内容。但是,如果它每次抛出500个服务器错误,并且Apollo客户端在发生这种情况时总是呈现“错误!网络错误:响应未成功:收到状态代码500”,我不理解。
customer: async (args, req) => {
    // do some validation on _id
    if (args._id && isValid(args._id) ) {
        try {
            const customer = await Customer.findById(args._id)
        } catch (e) {
          // handle server error
        }
    } else {
       // handle invalid _id here
    }