Как моя мутация из клиента apollo может получить ошибку 400, а я могу сделать это с детской площадки? - PullRequest
0 голосов
/ 14 марта 2020

У меня есть следующая мутация, которая работает на детской площадке.

mutation UpdateBoolean($newValue: Boolean!, $id: Int) {
  updateOneSetting(data: { darkMode: $newValue }, where: { id: $id }) {
    id
    darkMode
  }
}

// variables: {"id": 1, "newValue": false}

Однако она не работает, когда я делаю то же самое с моим клиентом apollo при реакции, показывая ошибку: Unhandled Rejection (Error): Network error: Response not successful: Received status code 400 .

const UPDATE_BOOLEAN = gql`
  mutation UpdateBoolean($newValue: Boolean!, $id: Int!) {
    updateOneSetting(data: { darkMode: $newValue }, where: { id: 1 }) {
      id
      darkMode
    }
  }
`;

const ToggleLabel: React.FC<ToggleLabelProps> = (props: ToggleLabelProps) => {
  const id = 1;
  const [mutation] = useMutation(UPDATE_BOOLEAN);

  const onChange = (
    event: React.ChangeEvent<HTMLInputElement>,
    checked: boolean
  ) => {
    console.log(checked); // true
    mutation({ variables: { newValue: checked, id: id } });
  };
  ...
`;

Я не совсем уверен, что указывает на ошибку? Может ли кто-нибудь дать мне предложение?

РЕДАКТИРОВАТЬ: Ошибка:

Error: Network error: Response not successful: Received status code 400
    at new ApolloError (ApolloError.ts:46)
    at Object.error (QueryManager.ts:255)
    at notifySubscription (Observable.js:140)
    at onNotify (Observable.js:179)
    at SubscriptionObserver.error (Observable.js:240)
    at observables.ts:15
    at Set.forEach (<anonymous>)
    at Object.error (observables.ts:15)
    at notifySubscription (Observable.js:140)
    at onNotify (Observable.js:179)
    at SubscriptionObserver.error (Observable.js:240)
    at httpLink.ts:184

1 Ответ

1 голос
/ 14 марта 2020

Вы можете увидеть причину сбоя вашего запроса, либо изучив ответ вашего сервера в инструментах разработчика вашего браузера, либо проверив объект error, возвращаемый ловушкой, либо проверив причину отклонения, вызвав catch на Обещание вернулось по телефону mutation(). Последнее, что вы должны делать независимо от того, чтобы вы могли обрабатывать любые ошибки, возникающие в результате выполнения вашей операции.

Тем не менее, причина, по которой ваш запрос не выполняется, заключается в том, что вы определили переменную, но она не используется ($id). Любые переменные, которые вы определили как часть вашей операции, должны использоваться хотя бы один раз в этой операции.

...