GraphQL。如何写解析器

时间:2017-10-09 11:13:45

标签: express graphql-js express-graphql

我刚开始进入GraphQL。我正在使用GraphQL.js和express。现在我正在尝试使用硬编码的JSON作为我的javascript文件中的数据构建一个简单的示例。然后,我想使用快速中间件通过卷曲或失眠来收听HTTP请求。在中间件中,我想使用body-parser提取查询。现在我遇到了旋转变压器问题。

请查看我的代码。

var express = require('express');
var graphqlHTTP = require('express-graphql');
var { buildSchema, graphql } = require('graphql');
var bodyParser = require('body-parser');

var schema = buildSchema(`
  type Product {
    name: String!
    price: Int!
  }

  type Query {
    product(name: String): Product
  }
`);

var products = {
  'Mango': {
    name: 'Mango',
    price: 12,
  },
  'Apfel': {
    name: 'Apfel',
    price: 3,
  },
};

resolvers = {
  Query: {
    product: (root, { name}) => {
      return products[name];
    },
  },
};

var app = express();
app.use(bodyParser.text({ type: 'application/graphql' }));

app.post('/graphql', (req, res) => {
  graphql(schema, req.body)
  .then((result) => {
    res.send(JSON.stringify(result, null, 2));
  });
});

app.listen(4000);

这不起作用。当我使用curl和

发布查询时
  

curl -XPOST -H“Content-Type:application / graphql”-d“{product(name:\”Apfel \“){name price}}”http://localhost:4000/graphql

我收到回复{“数据”。 {“product”:null}}。旋转变压器不会被调用。我怎么能正确地做到这一点?

2 个答案:

答案 0 :(得分:1)

你能试试吗?



var resolvers = {

  product: (args) => {
    return products[args.name];
  },


};
app.post('/graphql', (req, res) => {
  graphql(schema, req.body, resolvers)
    .then((result) => {
      res.send(JSON.stringify(result, null, 2));
    });
});




我认为这可以解决您的问题

答案 1 :(得分:0)

我建议观看有关GraphQl的FunFunFunction系列剧集: GraphQl Basics

他的所有剧集都非常有趣(而且非常有趣)......