图 QL。如何编写解析器

GraphQL. How to write resolver

我刚开始接触 GraphQL。我正在使用 GraphQL.js 和快递。现在我正在尝试使用硬编码的 JSON 作为我的 javascript 文件中的数据来构建一个简单的示例。然后我想使用 express 中间件通过 curl 或 insomnia 来监听 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);

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

进行查询时

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

我收到回复 {"data"。 {"product":空}}。解析器不会被调用。我怎样才能正确地做到这一点?

你能试试这个吗?

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

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

我推荐观看专注于 GraphQl 的 FunFunFunction 系列剧集: GraphQl Basics

他所有的剧集都很有趣(而且真的很有趣)...