Сервер Heroku Apollo выдает «ServerParseError: неожиданный токен <в JSON в позиции 0» только для некоторых запросов - PullRequest
0 голосов
/ 02 апреля 2020

Я создал оболочку GraphQL для PokeAPI . Все мои запросы работают в разработке, и большинство из них работают в производстве. Тем не менее, у меня есть следующий запрос, который работает в производстве для меньших диапазонов start и end, но выдает "ServerParseError: Unexpected token < in JSON at position 0", когда я пытаюсь запросить всех покемонов с очень большим диапазоном. Эта ошибка не возникает в разработке.

query {
    allPokemon(start: 0, end: 964) {
    id
    name
  }
}

Мой распознаватель в моем GraphQL для allPokemon поражает только одну конечную точку REST и возвращает массив объектов, имеющих следующую структуру:

{
  name: "charmander",
  url: "https://pokeapi.co/api/v2/pokemon/4/"
}

Мой резольвер сопоставляет результирующий массив, чтобы получить значение name и проанализировать значение url, чтобы получить номер идентификатора в конце строки.

Не уверен, если это уместно / необходимо включить сюда, но я использую apollo-datasource-rest. Я создал компонент класса, расширяющий RESTDataSource, который абстрагировал мои функции для моих распознавателей GraphQL. Затем я просто вызываю эти методы внутри моих средств распознавания. Мой allPokemon метод внутри этого RESTDataSource компонента выглядит следующим образом:

async getAllPokemon(start = 0, end = 964) {
        const response = await this.get(`pokemon?offset=${start}&limit=${end}`);

        const pokemonIds = response.results.map(pokemon =>
            parseUrl(pokemon.url)
        );

        return pokemonIds;
    }

parseUrl - это созданная мной функция utils, которая просто берет URL-адрес и анализирует его, чтобы получить число в конце URL после последнего /.

Тогда в моих резольверах у меня есть следующее:

const resolvers = {
  Query: {
    allPokemon: (parent, args, { dataSources }) => {
            return dataSources.pokemonAPI.getAllPokemon(args.start, args.end);
        }
  }
}

Кажется, я не могу понять, если это проблема с Heroku или с сервером Apollo. Я думаю, что с Heroku, так как у меня нет проблем в процессе получения ожидаемых данных для всех запросов. Я подумал, что, возможно, у Heroku должны быть какие-то ограничения в отношении времени ожидания или количества итераций функции синтаксического анализа, которые она может выполнить, но не смогли подтвердить эту теорию, не говоря уже о том, чтобы найти решение. Любая помощь приветствуется!

...