如何从服务器执行 GraphQL 查询
Posted
技术标签:
【中文标题】如何从服务器执行 GraphQL 查询【英文标题】:How to execute GraphQL query from server 【发布时间】:2017-05-16 10:28:41 【问题描述】:我正在使用 graphql-express 创建一个端点,我可以在其中执行 graphql 查询。虽然我将 Sequelize 与 SQL 数据库一起使用,但在我的 graphql resolve
函数之外直接从服务器使用它感觉不对。如何从定义的同一服务器查询我的 graphql API?
这就是我设置我的 graphql 端点的方式:
const express = require('express');
const router = express.Router();
const graphqlHTTP = require('express-graphql');
const gqlOptions =
schema: require('./schema')
;
router.use('/', graphqlHTTP(gqlOptions));
modules.exports = router;
基本上我想要的是能够做这样的事情:
query(`
user(id: $id)
name
`)
如何创建这个query
函数?
【问题讨论】:
【参考方案1】:GraphQL.js 本身不需要 http 服务器即可运行。 express-graphql 只是将查询解析器挂载到 http 端点的助手。
您可以将架构和查询传递给graphql
,它会返回一个 Promise,它将查询解析为数据。
graphql(schema, query).then(result =>
console.log(result);
);
所以:
const graphql = require('graphql');
const schema = require('./schema');
function query (str)
return graphql(schema, str);
query(`
user(id: $id)
name
`).then(data =>
console.log(data);
)
【讨论】:
要获得更多选项,请参阅github.com/graphql/graphql-js/blob/…的源代码 另外这里是graphql函数的官方文档页面:graphql.org/graphql-js/graphql/#graphql【参考方案2】:我想通过提供正确执行带有参数的查询/突变的模式来完成@aᴍɪʀ 的答案:
const params =
username: 'john',
password: 'hello, world!',
userData:
...
query(`mutation createUser(
$username: String!,
$password: String!,
$userData: UserInput)
createUserWithPassword(
username: $username,
password: $password,
userData: $userData)
id
name
familyName
givenName
`, params)
这样,您不必到处处理字符串构造位"
或'
。
【讨论】:
查询功能不也要改吗?您的调用传递了 2 个参数,而不是一个。以上是关于如何从服务器执行 GraphQL 查询的主要内容,如果未能解决你的问题,请参考以下文章
如何发送文件以响应 graphql 查询? (从服务器向客户端发送一个 csv 文件)