Reactjs 反应阿波罗错误仅显示状态代码500
我想知道如何使用react apollo访问前端的投掷错误 我用于获取单个客户的简单解析器如下所示,其中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
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
}