Nuxt Apollo SSR запрос, который зависит от результата другого запроса - PullRequest
0 голосов
/ 03 февраля 2020

Подобные вопросы в SO не относятся к SSR (рендеринг на стороне сервера) c, и их ответы не применимы в моем случае.

Я использую @ nuxtjs / apollo , который основан на vue -cli-plugin-apollo и vue -apollo

У меня есть два запроса X и Y. Переменная Y берется из результата X. Я хочу выполнить оба запроса на серверной стороне . Как этого добиться?

Ниже приведен упрощенный пример ниже. Однако запрос Y выполняется на стороне клиента .

{
  apollo: {
    X: {
      query: X
    },
    Y: {
      query: Y,
      variables() {
        return { id: this.X.someField };
      },
      skip() {
        return !this.X; // Skip until X have some result.
      }
    },
  }
}

В основном я хочу:

  • Выполнить запрос X на сервере и получить результат.
  • Выполнить запрос Y на сервере с переменной из результата запроса X.

Большое спасибо,

1 Ответ

0 голосов
/ 03 февраля 2020

Обычно, когда у вас есть запрос, который зависит от результата другого запроса, вы используете опцию skip, чтобы предотвратить запрос второго запроса, пока первый запрос не будет разрешен. Однако пропуск запроса означает, что он не будет предварительно выбран . Я думаю, что единственный способ сделать то, что вы пытаетесь сделать, это использовать asyncData вместо того, чтобы полагаться на умные запросы - вам придется вызывать метод query непосредственно для экземпляра ApolloClient. Вы могли бы сделать это только для первого запроса, а затем использовать полученные данные в качестве значения переменной во втором запросе, но не знаю, получится ли asyncData перед вашим запросом. запросы предварительно выбраны.

В качестве отступления, если вы запрашиваете у своего собственного сервера, вы можете рассмотреть возможность обновления вашего API. Обычно случаи, когда вам нужно соединить два запроса, как это, указывают на плохой дизайн схемы. Например, мне не нужно извлекать пользователя, получать его идентификатор, а затем извлекать сообщения пользователя по этому идентификатору - я должен иметь возможность извлекать весь график данных в одном запросе (пользователя и его сообщения).

...