2

使用 NodeJS,可以 graphQLHTTPexpress-graphqlwhich 中传递,如下所示:

  const {Schema} = require('./data/schema');
  const graphQLApp = express();
  graphQLApp.use('/', graphQLHTTP({
    graphiql: true,
    pretty: true,
    schema: Schema,
  }));

有了这种配置,我们就可以使用 GraphiQL。如何使用 Foxx 实现这一目标?从这个 repo中,我可以看到 Foxx 正在使用graphql-sync。我浏览了源代码,并在这里找到了它:

控制器.js

'use strict';
const Foxx = require('org/arangodb/foxx');
const schema = require('./schema');
const graphql = require('graphql-sync').graphql;
const formatError = require('graphql-sync').formatError;

const ctrl = new Foxx.Controller(applicationContext);

// This is a regular Foxx HTTP API endpoint.
ctrl.post('/graphql', function (req, res) {
  // By just passing the raw body string to graphql
  // we let the GraphQL library take care of making
  // sure the query is well-formed and valid.
  // Our HTTP API doesn't have to know anything about
  // GraphQL to handle it.
  const result = graphql(schema, req.rawBody(), null, req.parameters);
  console.log(req.parameters);
  if (result.errors) {
    res.status(400);
    res.json({
      errors: result.errors.map(function (error) {
        return formatError(error);
      })
    });
  } else {
    res.json(result);
  }
})
.summary('GraphQL endpoint')
.notes('GraphQL endpoint for the Star Wars GraphQL example.');

是否可以将 GraphiQL 与 Foxx 一起使用?如果YES,我该如何实现?有什么想法吗?

谢谢。

4

2 回答 2

2

您可以将 GraphiQL 与任何 GraphQL API 一起使用,即使它没有内置到服务器中。您可以通过几种不同的方式自己运行 GraphiQL:

  1. 作为一个独立的应用程序:https ://github.com/skevy/graphiql-app
  2. 作为应用程序中的 React 组件:https ://github.com/graphql/graphiql

如果您将它用作 npm 的 React 组件(选项 2),您实际上可以使用额外的选项自定义它,操作它发送到服务器的请求等等。

于 2016-06-24T03:58:09.980 回答
1

有一个名为ChromeiQL的 Chrome 扩展程序,它在工具栏上添加了一个用于打开 GraphiQL 窗口的按钮。简单易行,无需运行任何服务器

于 2016-06-29T22:56:30.917 回答