GraphQL Не удается прочитать свойство 'query' из неопределенного - PullRequest
1 голос
/ 23 июня 2019

Я не могу понять, почему я получаю запрос неопределенным, когда знаю, что мои определения верны. 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 run 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 db также есть 2 строки для наград

enter image description here

1 Ответ

1 голос
/ 24 июня 2019

Вы не должны использовать промежуточное ПО как express-graphql, так и apollo-server в вашей экспресс-заявке. Поскольку postgraphile-apollo-server явно работает с ApolloServer, исключите express-graphql. Наличие обоих промежуточных программ может вызвать непредвиденные проблемы, так как они прослушивают одни и те же пути.

Apollo отказался от GraphiQL в пользу GraphQL Playground. Если вы хотите использовать GraphiQL с Apollo, вы можете использовать пакет типа express-graphiql-middleware .

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