конфигурация heroku var не определена во время рендеринга на стороне сервера с помощью клиента Next.JS & Apollo - PullRequest
0 голосов
/ 01 марта 2019

У меня есть приложение Next.JS с React и клиентом Apollo, которое странно ведет себя при развертывании в Heroku.Единственное объяснение, которое соответствует тому, что я вижу, это то, что переменные конфигурации Heroku установлены недостаточно рано для выполнения рендеринга на стороне сервера.

Я установил конфигурационную переменную с именем API_URL (которая является адресом API-интерфейса GraphQL) и использую его при настройке клиента Apollo, например:

import withApollo from "next-with-apollo";
import ApolloClient, { InMemoryCache } from "apollo-boost";

export default withApollo(({ ctx, headers, initialState }) => {

  // Logging to double check the API_URL
  console.log(`process.env.API_URL: ${process.env.API_URL}`);

  return new ApolloClient({
    uri: process.env.API_URL,
    cache: new InMemoryCache().restore(initialState || {})
  });
});

Затем _app.tsx оборачивается компонентом withApollo, например:

// ...imports

class MyApp extends App {
  render() {
    const { Component, pageProps, apollo } = this.props;
    return (
      <Container>
        <ApolloProvider client={apollo}>
          <ThemeProvider theme={theme}>
            <Component {...pageProps} />
          </ThemeProvider>
        </ApolloProvider>
      </Container>
    );
  }
}

export default withApollo(MyApp);

Все согласнопример установки на next-with-apollo .

Все это прекрасно работает на локальном хосте, но при работе на Heroku это приводит к ошибке 501.В конфигурации Heroku var API_URL установлено (я трижды проверил панель управления Heroku).

Добавленная регистрация в withApollo показывает, что process.env.API_URL является ожидаемым значением на локальном хосте, но undefined при работе на Heroku.

Я также пытался использовать функцию Next.JS getInitialProps для выполнения рендеринга на стороне сервера и получения тех же результатов, консоль регистрации конфигурации конфигурации Heroku показывает, что она всегда undefined.

Выполнено запросовпосле загрузки страницы это поведение вообще не отображается.

Наконец, когда везде используется значение по умолчанию для значения конфигурации, например, uri = process.env.API_URL || "https://hardcoded.url/", все работает как шарм.

Не стоит ли ожидатьэто на работу?Мне кажется, что Heroku просто не устанавливает переменные конфигурации вовремя, чтобы использовать их при рендеринге на стороне сервера?

...