<p>لا يحترم apollo-link-http تجاوز طريقة GET</p>

تم إنشاؤها على ١٢ نوفمبر ٢٠١٧  ·  20تعليقات  ·  مصدر: apollographql/apollo-link

وفقًا للمستندات ، يتيح لنا الخيار fetchOptions ضبط طريقة الطلب على GET . أتوقع أنه بعد القيام بذلك ، سيتم تضمين الاستعلام كمعامل سلسلة استعلام بدلاً من نص الطلب ؛ يُلقي Chrome خطأً إذا حاولت تقديم طلب GET بهيئة.

النتيجة المنشودة:
يجب إنشاء سلسلة استعلام إذا كان أسلوب الطلب هو GET.

النتيجة الفعلية:
يتم استخدام نص الطلب.

كيفية إعادة إظهار المشكلة:

client.query({
  context: {
    fetchOptions: {
      method: 'GET',
    },
  },
  query: QUERY,
  variables: { query },
})
enhancement

التعليق الأكثر فائدة

szdc @ Outlaw11Aarackaf هنا هو كيف نفعل ذلك:

const customFetch = (uri, options) => {
  const { body, ...newOptions } = options;
  const queryString = objectToQuery(JSON.parse(body));
  requestedString = uri + queryString;
  return fetch(requestedString, newOptions);
};
const link = createHttpLink({
  uri: "data",
  fetchOptions: { method: "GET" },
  fetch: customFetch
});

ال 20 كومينتر

szdc نعم هذا بالتأكيد لا يعمل! هل ستكون منفتحًا على إضافته؟ شيء مثل https://github.com/apollographql/apollo-link/issues/257 قد يكون حلاً جيدًا أيضًا لتحويل الطلب قبل إرساله؟

سم مكعبarackaf @ outlaw11aputtyman جميع الذين لديهم مصلحة في هذا! يجب أن يكون تغييرًا صغيرًا جدًا لإضافته!

سأضيفها إذا لم يرغب أي شخص آخر في ذلك.

szdcarackaf يتحول ذلك انطلاقا هذا ممكن بالفعل! سأدفع الاختبار والمستندات قريبًا لإظهار كيف يمكن إجراؤه بدون تغييرات داخلية

szdc @ Outlaw11Aarackaf هنا هو كيف نفعل ذلك:

const customFetch = (uri, options) => {
  const { body, ...newOptions } = options;
  const queryString = objectToQuery(JSON.parse(body));
  requestedString = uri + queryString;
  return fetch(requestedString, newOptions);
};
const link = createHttpLink({
  uri: "data",
  fetchOptions: { method: "GET" },
  fetch: customFetch
});

jbaxleyiii هذا يبدو رائعا! مجرد فضول من أين يأتي objectToQuery؟ هل هناك فائدة على npm لذلك؟ أتخيل أنه سيكون من السهل جدًا أن تقوم فقط بتدوير ملفك الخاص إذا لزم الأمر - بشكل أساسي قم بتعيين Object.keys على

escapeUriComponnt(`${k}=${obj[k]}`).join("&");

أو شيئا من هذا القبيل

https://www.apollographql.com/docs/link/links/http.html#Sending -GET-Orders-custom-fetching

arackaf انظر التعليق:

// turn the object into a query string, try object-to-querystring package

https://github.com/Cyberlane/object-to-querystring

تضمين التغريدة شيء مذهل!

لدي مشكلة فقط.

تم إنشاء سلسلة الاستعلام:

http://localhost/graphql?operationName=AllPlayersQuery&variables=%5Bobject%20Object%5D&query=query%20All...

يحتوي على هذا: variables=%5Bobject%20Object%5D وهي مشكلة.

كيف يمكن اصلاح هذا؟

يبدو هذا مثل تسلسل URI القياسي - لا تعتقد أنه يمكنك تجنبه - لماذا يمثل مشكلة؟

URI قياسي؟ هذا: %5Bobject%20Object%5D ؟

encodeURIComponent ('books (title: "Hello World") {Book {title}}')

books(title%3A%22Hello%20World%22)%7BBook%7Btitle%7D%7D

استفساري في Apollo هو:

query AllPlayers {
  players {
    id
    name
    surname
}

ولذا لدي مشكلة مع المتغيرات [Object object] فارغة مع الكود المنشور بواسطةjbaxleyiii.

إليك تطبيق رد فعل مجردة (تم إنشاؤه باستخدام تطبيق create-رد فعل) يتم جلبه عبر GET ويعمل - راجع index.js : https://github.com/usefulio/example-graphql-via-get-react-app

johnunclesam من الواضح أن variables غير متسلسل قبل الترميز. لقد قمت ببساطة بضبط طريقة الجلب المخصصة الخاصة بي (تم الحصول عليها من مثال الريبو) عن طريق إضافة JSON.stringify مشروط:

const customFetch = (uri, options) => {
  const {body, ...newOptions} = options;
  const parsedBody = JSON.parse(body);
  const command = omitBy(parsedBody, isEmpty);

  if (command.variables) {
    command.variables = JSON.stringify(command.variables);
  }

  const requestedString = uri + '?' + queryString.stringify(command);

  return fetch(requestedString, newOptions);
};

إذن ما هو استخدام useGETForQueries ؟ لماذا لم يتم إنشاء الجلب المخصص عند useGETForQueries=true ؟
كيف أفرق بين الاستعلام والطفرة؟ أريد فقط استخدام GET للاستعلام (لذاكرة التخزين المؤقت لنظام أسماء النطاقات).

هذه مشكلة قديمة تسبق useGETForQueries ، والتي تمت إضافتها قليلاً بعد إصلاحها عن طريق https://github.com/apollographql/apollo-link/pull/510

أم ، يبدو أن useGETForQueries لا تعمل.

على وجه التحديد ، يبدو أن هناك خطأ في هذا السطر:

https://github.com/apollographql/apollo-link/blob/f94b1c6b984619ec1ef68cca3224be788ea140e4/packages/apollo-link-http/src/httpLink.ts#L41

let {
    uri = '/graphql',
    // use default global fetch if nothing passed in
    fetch: fetcher,
    includeExtensions,
    useGETForQueries,
    ...requestOptions
  } = linkOptions;

يجب أن يكون شيئًا مثل:

let {
    uri = '/graphql',
    // use default global fetch if nothing passed in
    fetch: fetcher,
    includeExtensions,
    fetchOptions,
    ...requestOptions
  } = linkOptions;

let {
  useGETForQueries
} = fetchOptions;

ما الذي جعلك تقول هذا؟ كيف تتصل بـ createHttpLink ؟

كانت ملاحظتي أعلاه من المرور عبر الكود باستخدام مصحح أخطاء ، لكن كان علي أن أفعل ذلك مرة أخرى لإعادة الإنتاج.

الكود الذي انتهى بنا الأمر بالاستقرار عليه هو:

import omitBy from 'lodash.omitby';
import isEmpty from 'lodash.isempty';

const graphQLUrl = 'http://the.server.com/graphql';

const customFetch = (uri, options) => {
  const { body, credentials, headers, ...newOptions } = options;
  let fetchUri = uri;
  if (body) {
    const parsedBody = JSON.parse(body);
    const command = omitBy(parsedBody, isEmpty);
    fetchUri = uri + "?" + queryString.stringify(command);
  }
  return fetch(fetchUri, newOptions);
};

const link = createHttpLink({
  uri: graphQLUrl,
  fetchOptions: { method: "GET" },
  fetch: customFetch
});

أعتقد أن سؤالي هو ، إذا كنت تتجاوز useGETForQueries داخل fetchOptions بدلاً من داخل createHttpLink ، فسيكون هذا هو السلوك الذي ستلاحظه ، لكنه لن يكون كذلك كيف تعمل API. أود أن أقترح إعطائها فرصة مرة أخرى!

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات