express + express-graphql helloworld 返回 null

我是一个新的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!
    }
    `
);

这是我的应用程序的根目录 app. 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。先谢谢你。

解决方案:

这个

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

是一个解析器映射,如 graphql-toolsapollo-server 期待得到的对象。这不是一个可以传递给 rootValue.

如果你想使用 rootValue 来解析你的根级字段,那么这个对象就需要只是一个没有类型信息的字段名的映射。此外,如果你使用函数作为值,它们将只接受三个参数(args、context和info)。

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

也就是说,这并不是一个解析函数–通过根节点传递这样的值与实际为模式中的字段提供解析器是不一样的。无论你使用的是什么HTTP库 (express-graphql 或其他东西),你应该差不多 永远不要使用buildSchema.

给TA打赏
共{{data.count}}人
人已打赏
未分类

如何免费部署一个java Spring引导应用?

2022-9-9 0:11:22

未分类

如何比较上一个值和新值?

2022-9-9 0:22:37

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索