This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { UserInputError } from 'apollo-server'; | |
const resolvers = { | |
Query: { | |
events(root, { zipCode }) { | |
// do custom validation for user inputs | |
const validationErrors = {}; | |
if (!isValidZipCode(zipCode)) { | |
validationErrors.zipCode = 'This is not a valid zipcode'; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"message": "Failed to get events due to validation errors", | |
"extensions": { | |
"code": "BAD_USER_INPUT", | |
"exception": { | |
"validationErrors": { | |
"zipCode": "This is not a valid zipcode" | |
} | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import ApolloClient from 'apollo-boost'; | |
const client = new ApolloClient({ | |
uri: '<your graphql endpoint>', | |
// Apollo Boost allows you to specify a custom error link for your client | |
onError: ({ graphQLErrors, networkError, operation, forward }) => { | |
if (graphQLErrors) { | |
for (let err of graphQLErrors) { | |
// handle errors differently based on its error code | |
switch (err.extensions.code) { |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const typeDefs = gql` | |
type Event { | |
name: String! | |
date: Date! | |
capacity: Int! | |
zipCode: String! | |
} | |
`; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const typeDefs = gql` | |
# define wrapper result type that could return either | |
# the added Event on success, or an array of Errors | |
# on error. Notice both fields are nullable. | |
type AddEventResult { | |
event: Event | |
validationErrors: [FieldValidationError!] | |
} | |
# define how you want errors to be represented. This |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"data": { | |
"searchMovies": { | |
"movies": [ | |
{ | |
"name": "Avengers Infinity War", | |
} | |
], | |
"recommendedForYou": null, | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const typeDefs = gql` | |
type MovieSearchResult { | |
movies: [Movie!]! | |
recommendedForYou: [Movie!] | |
} | |
... | |
` | |
// Note: since it makes no sense that we have a null | |
// Movie returned in the list, we should mark each Movie | |
// as non-nullable too. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import React from 'react'; | |
import { Query } from 'react-apollo'; | |
const MovieSearchResults = ({ keyword }) => ( | |
<Query query={SEARCH_MOVIES} variables={{ keyword }}> | |
{(data, loading, error) => { | |
if (loading) return <LoadingIndicator />; | |
// if networkError is present, we can be sure that no data | |
// was returned. We can simply display an error component. | |
if (error && error.networkError) return <ErrorDisplay />; |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
const typeDefs = gql` | |
type MovieSearchResult { | |
movies: [Movie] | |
recommendedForYou: [Movie] | |
} | |
type Query { | |
searchMovies(keyword: String!): MovieSearchResult! | |
} | |
` |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import { ApolloClient } from 'apollo-client'; | |
import { InMemoryCache } from 'apollo-cache-inmemory'; | |
import { HttpLink } from 'apollo-link-http'; | |
const client = new ApolloClient({ | |
link: ApolloLink.from([ | |
// other links go here | |
ReauthenticatonLink, | |
new HttpLink({ | |
uri: 'http://graphql-endpoint:4000', | |
}), |
NewerOlder