Я создал оболочку 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 должны быть какие-то ограничения в отношении времени ожидания или количества итераций функции синтаксического анализа, которые она может выполнить, но не смогли подтвердить эту теорию, не говоря уже о том, чтобы найти решение. Любая помощь приветствуется!