Развертывание приложения реакции / сервера apollo на Heroku - PullRequest
0 голосов
/ 06 июня 2019

То, что я пытаюсь сделать, - это развернуть приложение полной загрузки стека реакции / apollo-server на heroku.Таким образом, я пытаюсь обслуживать статические файлы клиента из серверной части express / apollo-server, например так:

const path = require('path');

const express = require('express');
const app = express();
const cors = require('cors');
const { ApolloServer } = require('apollo-server');

const { schema } = require('./schema');
const { resolvers } = require('./resolvers');

app.use(cors());

app.use(express.static('public'));

app.get('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, 'public', 'index.html'));
});

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

server.listen({ port: process.env.PORT || 4000 }).then(({ url }) => {
  console.log(`?  Server ready at ${url}`);
});

По какой-то причине я не понимаю, что клиент не обслуживается при развертывании на heroku.На URL heroku я получаю: GET query missing. Если я установлю Graphql на «Включен», я вижу его, я могу играть с разрешением данных.Но клиент не отображается.Я гадал app.get с * не работает, а затем index.html не ловится.

Как я могу это исправить?

Спасибо!

1 Ответ

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

Ошибка, которую вы получаете, состоит в том, что вы только выставляете server из ApolloServer на порт 4000 и не выставляете app с помощью клиентского приложения.

Для того, чтобыПриложение fullstack развернуто, вы также должны предоставить app, чтобы сделать это, вы можете использовать applyMiddleware из ApolloServer и связать сервер apollo и клиентский интерфейс, что-то вроде:

.....

app.get('*', (req, res) => {
  res.sendFile(path.resolve(__dirname, 'public', 'index.html'));
});

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

server.applyMiddleware({
  path: '/my-frontend', // you should change this to whatever you want
  app,
});

app.listen({ port: process.env.PORT || 4000 }, () => {
  console.log(`?  Server ready at http://localhost:4000`);
});

Теперь вы сможете перейти на http://localhost:4000/my-frontend и увидеть свое клиентское приложение.

Надеюсь, это поможет.

...