我正在练习GQL,我在Playground中显示数据时发出了问题。
我尝试点击jsonplace夹子api,检索所有的帖子并显示它们,但是它会引发以下错误。
error: GRAPHQL_FORMAT_ERROR: Expected Iterable, but did not find one for field Query.allPosts.请求:
{
allPosts {
id
}
}响应
{
"errors": [
{
"extensions": {
"code": "400"
}
}
],
"data": {
"allPosts": null
}
}下面是我的架构Posts.graphql
#Description of Post
type Post {
userId: Int
id: Int
title: String
body: String
}query.graphql
type Query {
dangerousGoods: DangerousGoodsCIO
allCourses: [Course]
course(id: Int!): Course
allPosts: [Post]
}query.ts
export const Query: QueryResolvers.Resolvers = {
async allPosts(_, _args, { injector }: ModuleContext) {
const response = await injector.get(Api).getAllPosts();
return response.body;
}
};api.ts
getAllPosts() {
const config = {
uri: `https://jsonplaceholder.typicode.com/posts`,
method: 'GET'
};
return this.request({ config, log: 'getAllPosts' })
.then(response => {
const allPost = response.json();
return allPost;
});
}注意:如果我像下面这样模拟响应,我可以看到结果。
因此,如果我硬编码post数据,那么它就像预期的那样工作,但当我从API中命中时,它就不能工作了。
请告诉我我在这里做错了什么。
public postsData = [...]
getAllPosts () {
return this.postsData;
}发布于 2019-01-27 12:36:32
丹尼尔·里尔登提到使用一个提取库是对的。您需要更仔细地看一下docs:https://developer.mozilla.org/en-US/docs/Web/API/Body/json
json()方法将承诺返回给JSON,而不是JSON本身,因此您只需要首先解决它。
此外,由于您在query.ts中使用异步/等待,因此保留使用承诺和重写api.ts的相同方法可能是值得的
async getAllPosts() {
const config = {
uri: `https://jsonplaceholder.typicode.com/posts`,
method: 'GET'
};
const response = await this.request({ config, log: 'getAllPosts' })
const allPost = await response.json();
return allPost;
}https://stackoverflow.com/questions/54343877
复制相似问题