Following the Apollo Angular docs, I applied this configuration to connect to a given graphql endpoint:
import { HttpClientModule } from "@angular/common/http";
import { ApolloModule, APOLLO_OPTIONS } from "apollo-angular";
import { HttpLinkModule, HttpLink } from "apollo-angular-link-http";
import { InMemoryCache } from "apollo-cache-inmemory";
@NgModule({
imports: [
BrowserModule,
HttpClientModule,
ApolloModule,
HttpLinkModule
],
providers: [{
provide: APOLLO_OPTIONS,
useFactory: (httpLink: HttpLink) => {
return {
cache: new InMemoryCache(),
link: httpLink.create({
uri: "https://my.endpoint.io/graphql"
})
}
},
deps: [HttpLink]
}],
})
export class AppModule {}
Is it possible to use this same configuration to connect to another graphql endpoint?
There is this section in the docs that shows how to use multiple clients, but I don't see how I can apply it with apollo-angular-link-http
Thanks.
I have a working solution by changing the initial configuration and following the second link about implementing multiple clients:
import { NgModule } from '@angular/core';
import { HttpClientModule, HttpHeaders } from '@angular/common/http';
import { Apollo, ApolloModule } from 'apollo-angular';
import { HttpLinkModule, HttpLink } from 'apollo-angular-link-http';
import { InMemoryCache } from 'apollo-cache-inmemory';
@NgModule({
imports: [
HttpClientModule,
ApolloModule,
HttpLinkModule
]
})
export class GraphQLModule {
private readonly URI1: string = 'http://first.endpoint.io/graphql';
private readonly URI2: string = 'http://second.endpoint.io/graphql';
constructor(
apollo: Apollo,
httpLink: HttpLink
) {
const options1: any = { uri: this.URI1 };
apollo.createDefault({
link: httpLink.create(options1),
cache: new InMemoryCache()
});
const options2: any = { uri: this.URI2 };
apollo.createNamed('endpoint2', {
link: httpLink.create(options2),
cache: new InMemoryCache()
});
}
}
The second client can then be used like this:
apollo.use('endpoint2').watchQuery({...});
If you want to use providers with useFactory
import { NgModule } from '@angular/core';
import { ApolloModule, APOLLO_OPTIONS, APOLLO_NAMED_OPTIONS } from 'apollo-angular';
import { HttpLinkModule, HttpLink } from 'apollo-angular-link-http';
import { InMemoryCache } from 'apollo-cache-inmemory';
import { ApolloClientOptions } from 'apollo-client';
const defaultUri= 'http://default.endpoint.io/graphql';
const secondUri = 'http://second.endpoint.io/graphql';
const thirdUri = 'http://third.endpoint.io/graphql';
export function createDefaultApollo(httpLink: HttpLink): ApolloClientOptions<any> {
return {
link: httpLink.create({ uri: defaultUri }),
cache: new InMemoryCache()
};
}
export function createNamedApollo(httpLink: HttpLink): Record<string, ApolloClientOptions<any>> {
return {
second: {
name: 'second',
link: httpLink.create({ uri: secondUri }),
cache: new InMemoryCache()
},
third: {
name: 'third',
link: httpLink.create({ uri: thirdUri }),
cache: new InMemoryCache()
}
};
}
@NgModule({
exports: [ApolloModule, HttpLinkModule],
providers: [
{
provide: APOLLO_OPTIONS,
deps: [HttpLink],
useFactory: createDefaultApollo
},
{
provide: APOLLO_NAMED_OPTIONS,
deps: [HttpLink],
useFactory: createNamedApollo
}
]
})
export class GraphQLModule {}
Usage:
apollo.use('second').watchQuery({...} });
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With