Клиент Apollo вызывает каждую мутацию и дважды запрашивает (Реагирует) - PullRequest
0 голосов
/ 24 сентября 2019

Каждый раз, когда я вызываю запрос или мутацию, он совершает два сетевых вызова, и я попадаю в созданные элементы.Я пытался изменить промежуточное программное обеспечение, но все равно получал те же проблемы."apollo-cache-inmemory": "^ 1.2.2", "apollo-client": "^ 2.3.2", "apollo-link": "^ 1.2.12", "apollo-link-context": "^ 1.0.8 "," apollo-upload-client ":" ^ 11.0.0 ",

Я пытался уменьшить промежуточное программное обеспечение и изменить некоторые пакеты, но все еще получал ту же проблему.

import { ApolloClient } from 'apollo-client'
import { InMemoryCache } from 'apollo-cache-inmemory'
import { appConfig } from 'config'
import { ApolloLink, from } from 'apollo-link'
import { logger } from 'libs/logger'
import { fetchKeyFromSession } from 'libs/session'
import { AUTHENTICATION_TOKEN } from 'constants/index'
import { createUploadLink } from 'apollo-upload-client'

const authMiddleware = new ApolloLink((operation, forward) => {
  logger(
    'GraphQL Interceptor ==>> ',
    operation.query.definitions[0].selectionSet.selections[0].name.value,
    window.location.pathname,
    operation.query.definitions[0].selectionSet.selections[0].arguments,
    window.location.pathname,
    operation.query.definitions[0].selectionSet.selections[0].arguments.map(
      arg => arg && arg.value && arg.value.name.value,
    ),
  )

  operation.setContext({
    headers: {
      Authorization: `Bearer ${fetchKeyFromSession(AUTHENTICATION_TOKEN)}`
    }
  })

  forward(operation).subscribe({
    next: result => logger('Apollo Link Result ==>> ', result),
    error: error => logger('Apollo Link Error ==>> ', error.response),
  })



  return forward(operation)
})


const uploadLink = createUploadLink({ uri: `${appConfig.config.BASE_URL}/api/v1` })

const cache = new InMemoryCache()

const defaultOptions = {
  query: {
    fetchPolicy: 'no-cache',
    errorPolicy: 'all',
  },
}

export const client = new ApolloClient({
  link: from([authMiddleware, uploadLink]),
  cache,
  defaultOptions,
  queryDeduplication: false
})

Это вообще не выдает никакой ошибки, но должно вызывать запрос / мутацию только один раз, а не дважды.Из-за этого в базе данных создано два объекта.

1 Ответ

1 голос
/ 24 сентября 2019
const authMiddleware = new ApolloLink((operation, forward) => {
  logger(
    'GraphQL Interceptor ==>> ',
    operation.query.definitions[0].selectionSet.selections[0].name.value,
    window.location.pathname,
    operation.query.definitions[0].selectionSet.selections[0].arguments,
    window.location.pathname,
    operation.query.definitions[0].selectionSet.selections[0].arguments.map(
      arg => arg && arg.value && arg.value.name.value,
    ),
  )

  operation.setContext({
    headers: {
      Authorization: `Bearer ${fetchKeyFromSession(AUTHENTICATION_TOKEN)}`
    }
  })

  return forward(operation)
})

Переадресация (операция) .subscribe () вызывает проблемы, устраняет ее, она начинает работать нормально.

...