如何从 html 客户端 运行 针对 faunadb 的 graphql
How to run a graphql against faunadb from html client
我对 graphql 和 faunadb 是全新的,所以如果这是一个愚蠢的问题,请耐心等待。
我看到我可以从仪表板 > GRAPHQL 运行 graphql 查询。例如粘贴以下代码
query FindAllTodos {
allTodos {
data {
_id
title
completed
list {
title
}
}
}
}
并点击 运行 按钮。但是我如何从我想在浏览器中 运行 的 html/js 代码中 运行 这个查询呢?
在 js 中我可以创建 clientsdk 但不确定如何传递上述查询?
import faunadb, { query as q } from 'faunadb';
let adminClient = new faunadb.Client({
secret: 'my-key'
});
在谷歌搜索中,我发现了一些使用 FQL 之类结构的示例,例如
adminClient.query(
q.Get(q.Ref(q.Collection('Todo'), '276653641074475527'))
)
.then((ret) => console.log(ret));
但是我如何才能通过 graphql 查询并获得相同的结果,它在 graphql 游乐场的右侧窗格中返回我。
您可以使用 curl 之类的客户端或任何 GraphQL 客户端。
使用 curl 你可以发出类似这样的命令:
curl -X POST -H 'Authorization: Bearer <your key>' https://graphql.fauna.com/graphql -d '{ "query": "{ FindAllTodos{ data {_id title completed list { title }} }}"}'
我可以为您提供 90% 的帮助,但我提供给您的代码是在使用 HttpClient 和 RxJs Observables 的 Angular 应用程序中用 TypeScript 编写的。稍加努力,您就可以使用 vanilla HTTP fetch 在 JS 中重写。
顺便说一句,Brecht De Rooms 的一段视频对我帮助很大:
https://www.youtube.com/watch?v=KlUPiQaTp0I
const SERVER_KEY = 'Your server key goes here';
const executeQuery = (query: string) => {
const headers = new HttpHeaders().set('Authorization', 'Bearer ' + SERVER_KEY);
return this.http.post<any>('https://graphql.fauna.com/graphql',
JSON.stringify({ query }), { headers });
}
const findAllTodos = () => {
const query = `query FindAllTodos {
allTodos {
data {
_id
title
completed
list {
title
}
}
}
}`;
return executeQuery(query);
}
findAllTodos().subscribe(console.log);
对我来说,障碍是了解到 Fauna 服务器期望 JSON 这种形式:
{ "query": "query FindAllTodos {allTodos { ... and so forth and so on ..." }
当您 运行 突变时,同样的结构适用:
{ "query": "mutation AddTodo { ...etc... " }
顺便说一下,如果您的查询第一次没有成功,我建议您打开浏览器的开发人员工具网络选项卡并检查发送到 Fauna 服务器的请求。查看响应。里面会有错误信息。即使出现错误,响应状态也将是 200(OK)。您需要查看响应以检查错误。
我对 graphql 和 faunadb 是全新的,所以如果这是一个愚蠢的问题,请耐心等待。 我看到我可以从仪表板 > GRAPHQL 运行 graphql 查询。例如粘贴以下代码
query FindAllTodos {
allTodos {
data {
_id
title
completed
list {
title
}
}
}
}
并点击 运行 按钮。但是我如何从我想在浏览器中 运行 的 html/js 代码中 运行 这个查询呢? 在 js 中我可以创建 clientsdk 但不确定如何传递上述查询?
import faunadb, { query as q } from 'faunadb';
let adminClient = new faunadb.Client({
secret: 'my-key'
});
在谷歌搜索中,我发现了一些使用 FQL 之类结构的示例,例如
adminClient.query(
q.Get(q.Ref(q.Collection('Todo'), '276653641074475527'))
)
.then((ret) => console.log(ret));
但是我如何才能通过 graphql 查询并获得相同的结果,它在 graphql 游乐场的右侧窗格中返回我。
您可以使用 curl 之类的客户端或任何 GraphQL 客户端。 使用 curl 你可以发出类似这样的命令:
curl -X POST -H 'Authorization: Bearer <your key>' https://graphql.fauna.com/graphql -d '{ "query": "{ FindAllTodos{ data {_id title completed list { title }} }}"}'
我可以为您提供 90% 的帮助,但我提供给您的代码是在使用 HttpClient 和 RxJs Observables 的 Angular 应用程序中用 TypeScript 编写的。稍加努力,您就可以使用 vanilla HTTP fetch 在 JS 中重写。
顺便说一句,Brecht De Rooms 的一段视频对我帮助很大: https://www.youtube.com/watch?v=KlUPiQaTp0I
const SERVER_KEY = 'Your server key goes here';
const executeQuery = (query: string) => {
const headers = new HttpHeaders().set('Authorization', 'Bearer ' + SERVER_KEY);
return this.http.post<any>('https://graphql.fauna.com/graphql',
JSON.stringify({ query }), { headers });
}
const findAllTodos = () => {
const query = `query FindAllTodos {
allTodos {
data {
_id
title
completed
list {
title
}
}
}
}`;
return executeQuery(query);
}
findAllTodos().subscribe(console.log);
对我来说,障碍是了解到 Fauna 服务器期望 JSON 这种形式:
{ "query": "query FindAllTodos {allTodos { ... and so forth and so on ..." }
当您 运行 突变时,同样的结构适用:
{ "query": "mutation AddTodo { ...etc... " }
顺便说一下,如果您的查询第一次没有成功,我建议您打开浏览器的开发人员工具网络选项卡并检查发送到 Fauna 服务器的请求。查看响应。里面会有错误信息。即使出现错误,响应状态也将是 200(OK)。您需要查看响应以检查错误。