Если я выполняю запрос GraphQL, используя node-fetch
или curl
, я получаю ожидаемые результаты. Например, если у меня есть файл gquery. js со следующим кодом:
const fetch = require("node-fetch")
fetch('https://api.example.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Service-Key': '123456789077',
},
body: JSON.stringify({query: "query($fruitId: String!) { fruit(id: $fruitId) { id, name } }",
variables: { "fruitId": "ikttwwwbvn7" }})
})
.then(r => r.json())
.then(data => console.log('data returned:', data));
И на моей машине с Ubuntu я просто запускаю $node gquery.js
, я получаю результат. Я также получу результат, если я использую обычный curl, например:
curl -H 'Content-Type: application/json' -X POST -H "X-Api-Service-Key: 123456789077" https://api.example.com/graphql -d '{ "query": "query($fruitId: String!) { fruit(id: $fruitId) { id, name } }", "variables": { "fruitId": "ikttwwwbvn7" }}'
Однако, если я просто использую fetch на Chrome, например:
fetch('https://api.example.com/graphql', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
'Accept': 'application/json',
'X-Api-Service-Key': '123456789077',
},
body: JSON.stringify({query: "query($fruitId: String!) { fruit(id: $fruitId) { id, name } }",
variables: { "fruitId": "ikttwwwbvn7" }})
})
.then(r => r.json())
.then(data => console.log('data returned:', data));
Я получаю сообщение об ошибке:
Доступ к выборке в 'https://api.example.com/graphql' из источника 'chrome -поиск: // local-ntp' заблокирован согласно политике CORS: Ответ на запрос предварительной проверки не проходит проверку контроля доступа: в запрашиваемом ресурсе отсутствует заголовок «Access-Control-Allow-Origin». Если непрозрачный ответ удовлетворяет вашим потребностям, установите режим запроса «no-cors» для извлечения ресурса с отключенным CORS.
Примечание. Моя конечная точка фактически отличается, но в остальном этот пример по сути так же, как у меня.
Я посмотрел на связанный вопрос , но ответы, похоже, подсказывают, что это не может быть решено только на стороне клиента. Но тот факт, что я могу использовать curl
и node
, успешно говорит мне о том, что у меня просто нет нужного кода.
Чтобы быть понятным, меня не волнует fetch
. Я рад использовать любое автономное решение Javascript, которое не требует использования клиента, такого как apollo или relay.