1

I would like to use text/event-stream via axios library in nodejs to subscribe GQL subscriptions.

It is possible? And how can I do it?

I am trying to use my code:

        console.log("a")
        const axios = require('axios');
        const response = await axios.get(
            'http://localhost:4003/graphql',
            { headers: { responseType: 'stream', accept: "text/event-stream" } }
        );
        console.log("b")

But b is never printed.

What is wrong?

Peter Cordes
  • 328,167
  • 45
  • 605
  • 847
lacaci3709
  • 43
  • 1
  • 3

1 Answers1

-3

You can check docs here:

https://the-guild.dev/graphql/yoga-server/docs/features/subscriptions

There are 2 problems.

In http requests there are required query

Correct example:

curl -N -H "accept:text/event-stream" http://localhost:4000/graphql?query=subscription%20%7B%0A%20%20countdown%28from%3A%205%29%0A%7D

but in your code there is only /graphql. So server event does not know what do you asking.

You should send request with disabled buffer

First option in curl is -N. Reading man curl you can find that it means no-buffer.

   -N, --no-buffer
         Disables  the buffering of the output stream. In normal work situations, curl will use a standard buffered output stream that will have the effect that it will output the data in chunks, not necessarily exactly
         when the data arrives.  Using this option will disable that buffering.

         Note that this is the negated option name documented. You can thus use --buffer to enforce the buffering.

         Example:
          curl --no-buffer https://example.com

         See also -#, --progress-bar.

Although this option works in curl

What is the LIBCURL equivalent to --N/--no-buffer?

it is not available in axios.

Why it will not work?

In curl you can send request and receive responses before closing connection. In axios you have to close connection to get response.

I recommend you use other methods described in first link. Read about Apollo Client, Urql and Relay and chose something. They are designed to help you, decrease amount of your code and simplify error handling.

Daniel
  • 7,684
  • 7
  • 52
  • 76