我是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
}
我知道还有其他服务器,但我真的需要用expressgraphql来解决这个问题。提前谢谢。
此
module.exports = {
Query: {
hello: (parent, { name }, context, info) => {
return `Hello ${name}`;
},
},
};
是类似于graphql-tools
或apollo-server
期望得到的解析器映射。这不是要传递给rootValue
的有效对象。
如果您想使用rootValue
来解析根级字段,那么对象只需要是一个没有类型信息的字段名映射。此外,如果使用函数作为值,它们将只接受三个参数(args、context和info(。
module.exports = {
hello: ({ name }, context, info) => {
return `Hello ${name}`;
},
};
也就是说,这不是一个解析器函数——通过根传递这样的值与实际为模式中的字段提供解析器不同。不管您使用的是什么HTTP库(express-graphql
或其他什么(,都不应该使用buildSchema。