如何从服务器执行GraphQL查询

时间:2017-01-02 10:08:53

标签: javascript graphql graphql-js

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

2 个答案:

答案 0 :(得分:13)

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

您可以将架构和查询传递给graphql,它会返回一个承诺,将查询解析为数据。

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);
})

答案 1 :(得分:1)

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

这样,您就不必在这里和那里处理字符串构造位"'