#reactjs #graphql #apollo
#reactjs #graphql #apollo
Вопрос:
В моем приложении React, использующем GraphQL и Apollo, я извлек данные из репозитория, над которым работаю с командой. После того, как я выполнил миграцию для получения последних обновлений БД, я начал получать сообщение об ошибке, как показано ниже. Я хотел бы знать, что мне нужно делать в соответствии с моей командой, похоже, это проблема с моей стороны, как будто что-то неправильно обновлялось при последнем запуске проекта.
Поля, на которые ссылается ошибка, реализованы в проекте и используются. Запрос также является общим
Я хотел бы знать, какие еще шаги я могу предпринять, чтобы понять, почему возникает эта ошибка, и может ли быть какая-либо проблема с кэшем, или мне нужно выполнить сброс.
{
"errors":[
{
"message":"Cannot query field "updatedAt" on type "Study". Did you mean "createdAt"?",
"locations":[
{
"line":10,
"column":5
}
],
"extensions":{
"code":"GRAPHQL_VALIDATION_FAILED",
"exception":{
"stacktrace":[
"Cannot query field "updatedAt" on type "Study". Did you mean "createdAt"?",
"",
"GraphQL request (10:5)",
" 9: createdAt",
"10: updatedAt",
" ^",
"11: archivedAt",
"",
" at Object.Field (/usr/src/app/node_modules/graphql/validation/rules/FieldsOnCorrectType.js:64:31)",
" at Object.enter (/usr/src/app/node_modules/graphql/language/visitor.js:334:29)",
" at Object.enter (/usr/src/app/node_modules/graphql/language/visitor.js:385:25)",
" at visit (/usr/src/app/node_modules/graphql/language/visitor.js:252:26)",
" at Object.validate (/usr/src/app/node_modules/graphql/validation/validate.js:63:22)",
" at validate (/usr/src/app/node_modules/apollo-server-core/src/requestPipeline.ts:293:22)",
" at Object.<anonymous> (/usr/src/app/node_modules/apollo-server-core/src/requestPipeline.ts:198:30)",
" at Generator.next (<anonymous>)",
" at fulfilled (/usr/src/app/node_modules/apollo-server-core/dist/requestPipeline.js:4:58)",
" at process._tickCallback (internal/process/next_tick.js:68:7)"
]
}
}
},
{
"message":"Cannot query field "archivedAt" on type "Study". Did you mean "createdAt"?",
"locations":[
{
"line":11,
"column":5
}
],
"extensions":{
"code":"GRAPHQL_VALIDATION_FAILED",
"exception":{
"stacktrace":[
"Cannot query field "archivedAt" on type "Study". Did you mean "createdAt"?",
"",
"GraphQL request (11:5)",
"10: updatedAt",
"11: archivedAt",
" ^",
"12: selfAssessmentOptions {",
"",
" at Object.Field (/usr/src/app/node_modules/graphql/validation/rules/FieldsOnCorrectType.js:64:31)",
" at Object.enter (/usr/src/app/node_modules/graphql/language/visitor.js:334:29)",
" at Object.enter (/usr/src/app/node_modules/graphql/language/visitor.js:385:25)",
" at visit (/usr/src/app/node_modules/graphql/language/visitor.js:252:26)",
" at Object.validate (/usr/src/app/node_modules/graphql/validation/validate.js:63:22)",
" at validate (/usr/src/app/node_modules/apollo-server-core/src/requestPipeline.ts:293:22)",
" at Object.<anonymous> (/usr/src/app/node_modules/apollo-server-core/src/requestPipeline.ts:198:30)",
" at Generator.next (<anonymous>)",
" at fulfilled (/usr/src/app/node_modules/apollo-server-core/dist/requestPipeline.js:4:58)",
" at process._tickCallback (internal/process/next_tick.js:68:7)"
]
}
}
}
]
}
Запрос, в котором возникает ошибка
export const getStudy = gql`
query getStudy($studyId: ID!) {
study(id: $studyId) {
id
duration
status
internalStudyName
startDate
sponsor
createdAt
updatedAt
archivedAt
selfAssessmentOptions {
welcomeImage
colorMain
colorLight
fontInclude
fontFamily
messages
contactForm
}
featureOptions {
studyId
recruitmentPortal
engagementPortal
}
}
}
`;
Комментарии:
1. Похоже, что он не может найти два поля в схеме — updatedAt и archivedAt. Возможно, они были удалены или серверная часть была изменена, чтобы не раскрывать их?
2. Действительно, первое предположение заключается в том, что
archivedAt
поле было удалено из структуры, возвращаемойstudy
запросом, однако вы упоминаете, что поле все еще на месте. Я бы начал расследование, просмотрев схемуstudy
запроса с использованием общедоступной конечной точки и средства экспорта graphql — чтобы проверить, что это на самом деле возвращает. Возможно, это другой тип. Возможно, вы заметите, что по какой-то причине это поле отсутствует, поэтому его может вызвать некоторый кеш.3. Я понимаю, но почему у всех нет проблем, а у меня да? Я уже переключился на master и испытываю ту же проблему после миграции и обновления кода до последней версии
4. Я обнаружил, что на самом деле были добавлены новые поля 3, но до сих пор не понимаю, почему у меня возникли проблемы при обновлении кода. Есть способ сброса кэша? система также использует RabbitMQ, может быть, в этом проблема?