Неполученное нарушение инварианта: commitRelayModernMutation: ожидается, что `environment` будет экземпляром` RelayModernEnvironment` - PullRequest
0 голосов
/ 12 марта 2019

Ошибка: необнаруженное нарушение инварианта: commitRelayModernMutation: ожидается, что environment будет экземпляром RelayModernEnvironment.При использовании Relay Modern и Relay Classic в одном приложении убедитесь, что мутации используют Relay Compat для работы в обеих средах.

Я использую разные настройки клиента и сервера для Relay.Я использовал 'graphql-relay-js' на бэкэнде, в то время как использовал relay modern на внешнем интерфейсе.

Я использовал простой relay-runtime для сети.

import { SubscriptionClient } from "subscriptions-transport-ws";
import { Environment, Network, RecordSource, Store } from "relay-runtime";


import { getToken } from "./utils/jwt"

/**
 * Create store for relay connection
 */
export const store = new Store(new RecordSource());

/**
 * Load Environment Configuration
 */
const host = process.env.GRAPH_QL_HTTP_SERVER_HOST.toString()
const port = process.env.GRAPH_QL_HTTP_SERVER_PORT
const httpEndPointUrl = process.env.GRAPH_QL_HTTP_SERVER_URL
const wsEndPointUrl = process.env.GRAPH_QL_SUBSCRIPTION_SERVER_URL
const httpEndPoint = `http://${host}:${port}/${httpEndPointUrl}`
const socketEndPoint = `ws://${host}:${port}/${wsEndPointUrl}`



/**
 * Fetch query from relay server
 * @param {*} operation 
 * @param {*} variables 
 */
const fetchQuery = (operation, variables) => {
  return fetch(`${httpEndPoint}`, {
    method: "POST",
    headers: {
      "Accept": "application/json",
      "Content-Type": "application/json",
      "Authorization": getToken()
    },
    body: JSON.stringify({
      query: operation.text,
      variables
    })
  }).then(response => {
    return response.json();
  });
};

/**
 * Setup subscription server
 * @param {*} config 
 * @param {*} variables 
 * @param {*} cacheConfig 
 * @param {*} observer 
 */
const setupSubscription = (config, variables, cacheConfig, observer) => {
  const query = config.text;
  const { onNext, onError, onCompleted } = observer;
  const subscriptionClient = new SubscriptionClient(
    `${socketEndPoint}`,
    { reconnect: true }
  );
  subscriptionClient
    .request({ query, variables })
    .subscribe(onNext, onError, onCompleted);
};

/**
 * Initialize network with fetch query and subscription
 */
const network = Network.create(fetchQuery);

const environment = new Environment({
  network,
  store
});

export default environment;

...