我正在尝试将REST数据源添加到Apollo Server。我创建了一个类来扩展包含所有API请求的RESTDataSource。当尝试从我的GraphQL解析器代码调用登录方法时,抛出错误
我该怎么补救呢?
我已经试过了在API类构造函数中绑定登录和获取方法
这个.登录=这个.登录.绑定(这个);获取=获取绑定(this);
从构造函数调用login方法
REST数据源类
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"
})
}
}
下面是index.js apollo服务器的"安装"文件:
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}`)
})
GraphQL的解析器文件:
Query: {
lessons: async (_source, _args, {
dataSources
}) => {
const data = await dataSources.webuntisAPI.login(process.env.USER, process.env.PW);
console.log(data);
return data;
}
}
3条答案
按热度按时间b4qexyjb1#
已解决问题。问题出在
initalize(config)
方法上,该方法在本例中是不必要的。因此,要解决此问题,只需从代码中删除initalize方法laik7k3q2#
我写这个是作为一个答案而不是评论,因为我没有足够的代表。在tutorial on their official website中,这是提到。
他们的教程运行良好,当克隆和运行,但同样的是,当我实现它与覆盖
initialize
不工作。然而,如果我不覆盖它,就像你提到的那样。我们做错了吗?或者他们的文档需要更新吗?因为context
上出现不正确的用户是一个严重的问题。w8ntj3qf3#
我通过从
apollo-datasource-rest
添加http缓存解决了这个问题