Postgraphile /graphql зависает без ошибок

#node.js #postgresql #graphql #postgraphile

Вопрос:

Я уже целых 2 дня ломаю голову над этим 😀 Сначала я думал, что это обратный прокси. Однако это было глупо, так как, конечно, этого не могло быть, поскольку /graphiql конечная точка работала идеально. Просто без загруженной схемы.

Так что теперь я просто не могу понять, почему /graphql конечная точка будет висеть бесконечно. Я могу только думать, что, возможно, у меня нет доступа к базе данных psql? Однако я проверил, что к /graphql конечной точке можно получить доступ через:

 // Works as expected and returns results correctly 
curl -H 'Content-Type: application/json' -X POST -d '<json>'  -H "Host: https://<https_url>.com" http://127.0.0.1:4006/graphql
 

Что еще более сбивает с толку…

server.js

 import cors from 'cors'

import scrape from './src/api/routes/scrape'

const express = require('express')
const { ApolloServer, gql } = require('apollo-server-express')
const { postgraphile } = require('postgraphile')
const ConnectionFilterPlugin = require('postgraphile-plugin-connection-filter')

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}`

var corsOptions = {
  origin: '*',
  optionsSuccessStatus: 200, // some legacy browsers (IE11, various SmartTVs) choke on 204
}

async function main() {
  // Construct a schema, using GraphQL schema language
  const typeDefs = gql`
    type Query {
      hello: String
    }
  `

  // Provide resolver functions for your schema fields
  const resolvers = {
    Query: {
      hello: () => 'Hello world!',
    },
  }

  const server = new ApolloServer({ typeDefs, resolvers })

  const app = express()
  app.use(cors(corsOptions))
  app.use(
    postgraphile(process.env.DATABASE_URL || dbUrl, 'public', {
      appendPlugins: [ConnectionFilterPlugin],
      watchPg: true,
      graphiql: true,
      enhanceGraphiql: true,
    })
  )
  server.applyMiddleware({ app })

  //Scraping Tools
  scrape(app)

  const port = 4006
  await app.listen({ port })
  console.log(`🚀 Server ready at http://localhost:${port}`)
}

main().catch(e => {
  console.error(e)
  process.exit(1)
})
 

Просто для краткости вот хост:

 <VirtualHost 185.132.41.127:80>
    ServerName api.miniatureawards.com
    Redirect permanent / https://api.miniatureawards.com/
</VirtualHost>
<IfModule mod_ssl.c>
    <VirtualHost 185.132.41.127:443>
        ServerAdmin jamie@hutber.com
        ServerName api.miniatureawards.com

        ProxyRequests on
        LoadModule proxy_module /usr/lib/apache2/modules/mod_proxy.so
        LoadModule proxy_http_module /usr/lib/apache2/modules/mod_proxy_http.so

        ProxyPass / http://localhost:4006/
        ProxyPassReverse / http://localhost:4006/
    

        #certificates SSL
        SSLEngine on

        ErrorLog ${APACHE_LOG_DIR}/error_api.miniatureawards.com.log
        CustomLog ${APACHE_LOG_DIR}/access_api.miniatureawards.com.log combined

    </VirtualHost>
</IfModule>
 

Комментарии:

1. Отладка: Есть ли сетевое подключение к базе данных? Существует ли сеанс работы с базой данных? Каково его состояние? И так далее.

2. Спасибо @LaurenzAlbe Ну, на данный момент очень сложно подтвердить, есть ли успешное подключение к psql. Мои журналы psql пусты. Как и журнал ошибок для api.миниатюр. psql активен. Апач тоже. Это URL адрес api.miniatureawards.com/graphiql это означало бы попытку подключиться к psql через graphql . process.env.DATABASE_URL || dbUrl это строка кода, которая будет выполнять подключение за меня.

3. Если сообщение журнала PostgreSQL отсутствует даже при установке log_connections = on , вы даже не достигнете сервера PostgreSQL.

4. Еще раз спасибо! Так что это шаг для меня 😀 По крайней мере, я знаю, что это еще не проблема с auth. Я не могу придумать ни одной причины, по которой мой FE не может получить доступ к psql. Это работает локально, и я пока не вижу ошибок.

5. Возможно, это важная информация о моей настройке postgraphile: Url базы данных = postgres://username:password@localhost:5432/miniatureawards Мне интересно, нужно ли мне указывать что-либо на localhost:4006?