Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
HTTPGetRequestForQueriesInterface
import { HTTPFetchNetworkInterface, printAST } from 'apollo-client';
/**
* Serialize a object to a query string
* @source https://stackoverflow.com/questions/1714786/query-string-encoding-of-a-javascript-object#comment47677757_18116302
*/
function serialize( obj ) {
return `?` + Object.keys(obj).map(k => k + `=` + encodeURIComponent(obj[k])).join(`&`);
}
class HTTPGetRequestForQueriesInterface extends HTTPFetchNetworkInterface {
fetchFromRemoteEndpoint({ request, options }) {
const isQuery = request.query.definitions[0].operation === `query`;
if (!isQuery) {
return super.fetchFromRemoteEndpoint({ request, options });
}
const opts = Object.assign({}, this._opts, {
method: `GET`,
headers: Object.assign({
Accept: `*/*`,
'Content-Type': `application/json`,
}, (options.headers || {})),
});
const query = printAST(request.query)
.replace(/(?:\r\n|\r|\n)/g, ``)
.replace(/\s\s+/g, ` `);
const variables = JSON.stringify(request.variables);
const { operationName } = request;
const getParams = {
query,
variables,
operationName,
};
return fetch(this._uri + serialize(getParams), opts);
}
}
export default HTTPGetRequestForQueriesInterface
@kmb64

This comment has been minimized.

Copy link

@kmb64 kmb64 commented Nov 24, 2017

I had to remove the 'Content-Type' header, to get this to work with express-graphql

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment