18

enter image description here

const httpLink = createHttpLink({
  uri: 'http://localhost:3090/'
})

const client = new ApolloClient({
  link: httpLink,
  cache: new InMemoryCache()
})

client.query({
  query: gql`
    query users {
        email
    }
  `,
})
  .then(data => console.log(data))
  .catch(error => console.error(error));

This query gives an error when fetching from client-side code but when i execute this query in browser on http://localhost:3090/graphql it fetches data correctly

4
  • Open network tab in developers console and tell us what ApolloError is. Commented Nov 8, 2018 at 14:20
  • @kiarashws added a screenshot for the request Commented Nov 8, 2018 at 14:26
  • as you can see Status Code is 404(not found), which means given url is incorrect. Commented Nov 8, 2018 at 14:35
  • Looks like your request is not answered with a JSON object but an HTML page <HTML>.... Typically the case for unhandled errors, where you are served a default error page. Because you're connecting to the root URL, my guess is a 404? Commented Nov 8, 2018 at 14:54

8 Answers 8

27

The graphql endpoint you are posting your queries to is missing the /graphql. So your server probably returns an html document containing the 404 error message that starts with < from <html.... Apollo tries to parse that as the query result and fails to do so.

Check that httpLink is actually localhost:3090/graphql.

Also the syntax of a query is either:

{
    users {
        email
    }
}

or if you want to name the query:

query Users {
    users {
        email
    }
}
Sign up to request clarification or add additional context in comments.

6 Comments

@MukeshKumar please add the full error message to your question.
after adding /graphql ..?
@MukeshKumar Yes. I can't tell you why it fails without the message.
POST localhost:3090/graphql 400 (Bad Request) index.js:1452 Error: Network error: Response not successful: Received status code 400 at new ApolloError (ApolloError.js:58) at QueryManager.js:522 at QueryManager.js:982 at Array.forEach (<anonymous>) at QueryManager.js:981 at Map.forEach (<anonymous>) at QueryManager.broadcastQueries (QueryManager.js:977) at QueryManager.js:477
@MukeshKumar I'm affraid that does not contain any helpful information. But I think that the syntax of your query is incorrect too. It must be just gql`{ users { email } } or qgl`query Users { users { email } }` .
|
1

For posterity in case someone finds this in the future, another reason you might get this error is if your API is returning something other than JSON. https://medium.com/programmers-developers/one-simple-apollo-client-debugging-tip-youll-like-7877a97b9c16

I ran into this issue because the content type that was being returned from my API was text/plain rather than application/json. Apollo lets you specify a different body serializer in this case. https://www.apollographql.com/docs/link/links/rest/

Comments

0

This happens when you do not define the path correctly in the queries files. This is a typechecking error when passing arguments

Comments

0

In my case this error was being thrown due to a trailing slash I had after the API URL. A possible fix would be checking your API URL properly and ensuring it is referencing the correct URL.

In my case, I only had to take out the trailing slash / after the URL.

Comments

0

As @Trixn posted: "So your server probably returns an html document containing the 404 error message that starts with < from <html.... Apollo tries to parse that as the query result and fails to do so."

In my case, I did not put "http://" in the beginning of my URL, and this returned a HTML web page with an error message.

Also check that usually, you should use "https://"

Comments

0

Make sure that you have configured the uri for httpLink and wsLink same. I have seen this error when I had different uris as below.

httpLink had uri : "http://localhost:4000" wsLink had uri: "ws://localhost:4000/graphql"

setting httpLink's uri to http://localhost:4000/graphql helped resolving the issue.

Comments

0

In my case, I recieved the same error, when I switched from a create-react-app to a next JS app pointing to port 3000.The react app had some values saved to local storage (tokens). In my case all I had to do, was to clear the local storage for localhost:3000, and I got rid of the error.

Comments

0

In my case, there was a typo in my graphql endpoint url. I had added a few characters to the end by accident. I think it would be good practice to add a catch rule for this situation so it does not break the site, just does not show the content and posts error to console log.

Comments

Your Answer

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

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.