【问题标题】:How to execute GraphQL query from server如何从服务器执行 GraphQL 查询
【发布时间】: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 函数?

【问题讨论】:

    标签: javascript graphql graphql-js


    【解决方案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);
    })
    

    【讨论】:

    【解决方案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 个参数,而不是一个。
    猜你喜欢
    • 2019-05-26
    • 2019-06-30
    • 2021-03-08
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    相关资源
    最近更新 更多