angular - GQL 不返回结果
问题描述
我正在练习 GQL,在Playground
.
我试图点击 jsonplaceholder 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
}
查询.graphql
type Query {
dangerousGoods: DangerousGoodsCIO
allCourses: [Course]
course(id: Int!): Course
allPosts: [Post]
}
查询.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;
});
}
注意:如果我像下面这样模拟响应,我可以看到结果。
因此,如果我对发布数据进行硬编码,那么它会按预期工作,但当我从 API 中点击时却无法正常工作。
请告诉我我在这里做错了什么。
public postsData = [...]
getAllPosts () {
return this.postsData;
}
解决方案
Daniel Rarden 提到使用 fetch 库是正确的。您需要更仔细地查看文档: https ://developer.mozilla.org/en-US/docs/Web/API/Body/json
json()
方法返回 Promise 到 JSON,而不是 JSON 本身,所以你只需要先解决它。
此外,当您在其中使用 async/await 时query.ts
,可能值得保持使用 Promises 的相同方法并重写您的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;
}
推荐阅读
- python - Docker 无法创建 conda 虚拟环境
- java - 用于在动作子句中传递参数的字符串连接
- git - 当 git repo 中有提交时,用于 codepileline 的 Github webhook 不会触发
- reactjs - 反应功能组件的 setState 未应用更改
- mysql - 基于另一个表的查询列表使用 SQL 语句插入的优雅方式?
- python-3.x - 我们如何在 pytest 中简单地隐藏日志错误消息
- java - 我编写的实用程序无法正常工作 + 测试用例
- sql - 在 ACCESS 查询中强制使用 NULL 条目
- android - Android Studio 4.0 不高亮和着色原生 C++ 代码语法
- python - AttributeError:模块“matplotlib”在 Visual Studio 的 jupyter-notebook 上没有属性“get_data_path”