GraphQL 无法读取未定义的 属性 'query'
GraphQL Cannot read property 'query' of undefined
当我知道我的定义是正确的时候,我不明白为什么我会得到一个未定义的查询。 graphiQL
正在毫无问题地采用我的方案:
自动完成工作正常:
点击 ctrl+enter
后,所有字段都已输入,见上文。
然后我执行查询,我会得到:
{
"errors": [
{
"message": "Cannot read property 'query' of undefined",
"locations": [
{
"line": 1,
"column": 3
}
],
"path": [
"allAwards"
]
}
],
"data": {
"allAwards": null
}
}
npm 运行 graphql
"graphql": "nodemon -r dotenv/config --experimental-modules --inspect=[9222] graphql_server.js",
graphql_server.js
import express from 'express'
import pg from 'pg'
import graphqlHTTP from 'express-graphql'
import PAS from 'postgraphile-apollo-server'
import AP from 'apollo-server-express'
const { makeSchemaAndPlugin } = PAS
const { ApolloServer } = AP
const env = process.env.NODE_ENV || 'development'
const dbHost = process.env.DB_HOST
const dbPort = process.env.DB_PORT
const dbName = process.env.DB_NAME
const dbUser = process.env.DB_USER
const dbPwd = process.env.DB_PWD
const dbUrl = dbPwd
? `postgres://${dbUser}:${dbPwd}@${dbHost}:${dbPort}/${dbName}`
: `postgres://${dbHost}:${dbPort}/${dbName}`
const pgPool = new pg.Pool({
connectionString: dbUrl,
})
async function main() {
const { schema, plugin } = await makeSchemaAndPlugin(
pgPool,
'public', // PostgreSQL schema to use
{
// PostGraphile options, see:
// https://www.graphile.org/postgraphile/usage-library/
}
)
const server = new ApolloServer({
schema,
plugins: [plugin],
})
const app = express()
app.use(
'/graphql',
graphqlHTTP({
schema: schema,
graphiql: true,
})
)
server.applyMiddleware({ app })
app.listen({ port: 4000 }, () => console.log(` Server ready at http://localhost:4000${server.graphqlPath}`))
}
main().catch(e => {
console.error(e)
process.exit(1)
})
目前在 psql 数据库中也有 2 行用于奖励
您不应在 express 应用程序中同时使用 express-graphql
和 apollo-server
的中间件。因为 postgraphile-apollo-server
明确与 ApolloServer 一起工作,所以完全删除 express-graphql
。使用两个中间件可能会导致意外问题,因为它们在相同的路径上监听。
Apollo 放弃了 GraphiQL,转而使用 GraphQL Playground。如果你想将 GraphiQL 与 Apollo 一起使用,你可以使用像 express-graphiql-middleware.
这样的包
当我知道我的定义是正确的时候,我不明白为什么我会得到一个未定义的查询。 graphiQL
正在毫无问题地采用我的方案:
自动完成工作正常:
点击 ctrl+enter
后,所有字段都已输入,见上文。
然后我执行查询,我会得到:
{
"errors": [
{
"message": "Cannot read property 'query' of undefined",
"locations": [
{
"line": 1,
"column": 3
}
],
"path": [
"allAwards"
]
}
],
"data": {
"allAwards": null
}
}
npm 运行 graphql
"graphql": "nodemon -r dotenv/config --experimental-modules --inspect=[9222] graphql_server.js",
graphql_server.js
import express from 'express'
import pg from 'pg'
import graphqlHTTP from 'express-graphql'
import PAS from 'postgraphile-apollo-server'
import AP from 'apollo-server-express'
const { makeSchemaAndPlugin } = PAS
const { ApolloServer } = AP
const env = process.env.NODE_ENV || 'development'
const dbHost = process.env.DB_HOST
const dbPort = process.env.DB_PORT
const dbName = process.env.DB_NAME
const dbUser = process.env.DB_USER
const dbPwd = process.env.DB_PWD
const dbUrl = dbPwd
? `postgres://${dbUser}:${dbPwd}@${dbHost}:${dbPort}/${dbName}`
: `postgres://${dbHost}:${dbPort}/${dbName}`
const pgPool = new pg.Pool({
connectionString: dbUrl,
})
async function main() {
const { schema, plugin } = await makeSchemaAndPlugin(
pgPool,
'public', // PostgreSQL schema to use
{
// PostGraphile options, see:
// https://www.graphile.org/postgraphile/usage-library/
}
)
const server = new ApolloServer({
schema,
plugins: [plugin],
})
const app = express()
app.use(
'/graphql',
graphqlHTTP({
schema: schema,
graphiql: true,
})
)
server.applyMiddleware({ app })
app.listen({ port: 4000 }, () => console.log(` Server ready at http://localhost:4000${server.graphqlPath}`))
}
main().catch(e => {
console.error(e)
process.exit(1)
})
目前在 psql 数据库中也有 2 行用于奖励
您不应在 express 应用程序中同时使用 express-graphql
和 apollo-server
的中间件。因为 postgraphile-apollo-server
明确与 ApolloServer 一起工作,所以完全删除 express-graphql
。使用两个中间件可能会导致意外问题,因为它们在相同的路径上监听。
Apollo 放弃了 GraphiQL,转而使用 GraphQL Playground。如果你想将 GraphiQL 与 Apollo 一起使用,你可以使用像 express-graphiql-middleware.
这样的包