I am wondering how I can access my throw errors in my frontend with react-apollo?

My simple resolver for fetching a single customer is like this, where args._id is the customer ID. Now if the id is not valid react-apollo just throws an 500 error.

Error! Network error: Response not successful: Received status code 500

 customer: async (args, req) => { const validateId = (id) => { return mongoose.Types.ObjectId.isValid(id) } if(args._id && validateId(args._id)){ try { const customer = await Customer .findById(args._id) return transformCustomer(customer) } catch (err) { throw err } } else { throw new Error("error") } }, 

I tried using errorPolicy="all" and accessing error.graphQLErrors, but that dosn't work, because it throws a 500 error.

Cannot read property 'graphQLErrors' of undefined

2 Answers

EDIT (in addiition to wrapping in a try/catch) - Perhaps you should be checking whether _id is valid before sending a request to the server:

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 } 
3

To catch an error thrown by apollo you need to wrap the call that executes the query into a try-catch.

In your example this is probably:

try { const customer = await Customer.findById(args._id); } catch(err) { // handle the error } 

However a 500 is always a programming error and should be fixed on the server. It seems your server doesn't do the required validation before using the parameters passed in the query.

1

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.