I am trying to add a REST datasource to my Apollo Server. I created a class which extends RESTDataSource which contains all the API requests. When trying to call the login method from my GraphQL resolver code the error is thrown
How can I fix this?
I already tried: Binding the login and fetch method in the API class constructor
this.login = this.login.bind(this); this.fetch = this.fetch.bind(this);
calling the login method from the constructor
RESTDataSource class
class API extends RESTDataSource {
constructor() {
super();
this.baseURL = URL;
this.login = this.login.bind(this);
this.fetch = this.fetch.bind(this);
console.log(this.fetch);
console.log(this.login);
}
initialize(config) {
//config can store different information
//the current user can be stored in config.context for easy access
this.context = config.context;
}
async login(username, password) {
return this.post(`/`, {
"id": 1
}, {
"method": "authenticate"
}, {
params: {
"user": username,
"password": password
},
"jsonrpc": "2.0"
})
}
}
Here's the index.js apollo server 'setup' file:
const server = new ApolloServer({
typeDefs,
resolvers,
dataSources: () => {
return {
managementDatabase: new ManagementDatabase(),
API: new API() //was previously imported
}
}
});
server.listen().then(({
url
}) => {
log(`???? Server ready at ${url}`)
})
Resolver file for GraphQL:
Query: {
lessons: async (_source, _args, {
dataSources
}) => {
const data = await dataSources.webuntisAPI.login(process.env.USER, process.env.PW);
console.log(data);
return data;
}
}
console.log(this.fetch);
show in the console? – kmoser[Function: bound fetch]
– Orbitnode_modules\\apollo-datasource-rest\\dist\\RESTDataSource.js:158:63)
. I also noticed something we printingthis
in the API class. There is a property calledhttpFetch
which is undefined. When looking in to the restdatasource.js file the line that is throwing the errorconst response = yield this.httpCache.fetch(request, {..
uses this.httpCache which is created like this in the constructor:this.httpCache = new HTTPCache_1.HTTPCache(config.cache, this.httpFetch)
using httpFetch which(i guess) is undefined. But I have no clue why – Orbit