如何从服务器执行 GraphQL 查询

How to execute GraphQL query from server

我正在使用 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 函数?

GraphQL.js 本身不需要 http 服务器到 运行。 express-graphql 只是一个将查询解析器挂载到 http 端点的助手。

您可以将架构和查询传递给 graphql,它将 return 一个将查询解析为数据的 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);
})

我想通过提供正确执行带有参数的查询/突变的模式来完成@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)

这样,您就不必到处处理字符串构造位 "'