javascript - GraphQL 无法读取未定义的属性 'query'

标签 javascript graphql apollo postgraphile

当我知道我的定义是正确的时候,我无法弄清楚为什么我会得到一个未定义的查询。 graphiQL 正在毫无问题地采用我的方案:

enter image description here

自动完成工作正常:

Before hitting alt+enter

enter image description here

在按下 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 行用于奖励

enter image description here

最佳答案

您不应在 express 应用程序中同时使用来自 express-graphqlapollo-server 的中间件。因为 postgraphile-apollo-server 明确地与 ApolloServer 一起工作,所以完全放弃 express-graphql。拥有这两个中间件可能会导致意外问题,因为它们在相同的路径上监听。

Apollo 放弃了 GraphiQL,转而使用 GraphQL Playground。如果你想将 GraphiQL 与 Apollo 一起使用,你可以使用像 express-graphiql-middleware 这样的包。 .

关于javascript - GraphQL 无法读取未定义的属性 'query',我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56727449/

相关文章:

javascript - 如何更改 Chrome 扩展中的事件标签网址

javascript - AngularJS UI 日历保留对旧事件的引用

javascript - 如何根据使用 JavaScript 的浏览器调整文本框的宽度

graphql - 如何从 Graphql 的多个集合中返回数据?

graphql - Cypress graphql apollo 调用没有给出结果并自动重试

java - ApacheActiveMQ 和 ApacheActiveMQApollo 的区别

javascript - 为什么 useQuery 调用会导致我的组件重新渲染?

javascript - 使用 Javascript 更改 CSS 元素

javascript - 使用 getInitialProps 保护路由 - Next.js

graphql - 找不到模块 'graphql/tsutils/Maybe' 或其对应的类型声明