express + express -graphql helloworld возвращает ноль - PullRequest
1 голос
/ 24 апреля 2020

Я новичок в graphql и пытаюсь реализовать простое решение helloworld, которое при запросе возвращает null. Установка включает в себя sequelize и pg и pg-hstore, которые я, однако, отключил, чтобы попытаться выяснить, в чем проблема. Заранее спасибо, застрял на два дня.

Вот мой распознаватель:

module.exports = {
  Query: {
    hello: (parent, { name }, context, info) => {
      return `Hello ${name}`;
    },
  },
};

Вот моя схема:

const { buildSchema } = require("graphql");
module.exports = buildSchema(
  `type Query{
        hello(name:String!):String!
    }
    `
);

Вот root моего приложения, приложение. js. Я упустил промежуточное программное обеспечение, которое я отключил, поскольку оно кажется несущественным, поскольку у меня возникает ошибка с или без них

const createError = require("http-errors");
const express = require("express");
const path = require("path");
const cookieParser = require("cookie-parser");
const logger = require("morgan");
const sassMiddleware = require("node-sass-middleware");
const graphqlHTTP = require("express-graphql");
const schema = require("./persistence/graphql/schema");
const persistence = require("./persistence/sequelize/models");
const rootValue = require("./persistence/sequelize/resolvers/index");

const indexRouter = require("./routes/index");
const usersRouter = require("./routes/users");

const app = express();

// view engine setup
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "pug");

app.use(
  "/api/graphql",
  graphqlHTTP({
    schema,
    rootValue,
    graphiql: true,
  })
);

module.exports = app;

, когда я запрашиваю следующее:

{
   hello(name: "me")
}

Я получаю эту ошибку:

{
  "errors": [
    {
      "message": "Cannot return null for non-nullable field Query.hello.",
      "locations": [
        {
          "line": 2,
          "column": 3
        }
      ],
      "path": [
        "hello"
      ]
    }
  ],
  "data": null
}

Я знаю, что есть другие серверы, но мне действительно нужно выяснить это с помощью express -graphql. Заранее спасибо.

1 Ответ

0 голосов
/ 24 апреля 2020

module.exports = {
  Query: {
    hello: (parent, { name }, context, info) => {
      return `Hello ${name}`;
    },
  },
};

- это карта резольвера, подобная той, которую ожидают получить graphql-tools или apollo-server. Это недопустимый объект для передачи на rootValue.

Если вы хотите использовать rootValue для разрешения ваших полей root -уровня, тогда объект должен быть просто картой имен полей без информации о типе. Кроме того, если вы используете функции в качестве значений, они будут принимать только три аргумента (аргументы, контекст и информация). root - это не то же самое, что фактическое предоставление распознавателей для полей в вашей схеме. Независимо от того, какую HTTP-библиотеку вы используете (express-graphql или что-то еще), вы должны никогда не использовать buildSchema .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...