2016-01-07 15 views
19

मेरे पास दो ऐप्स हैं, एक प्रतिक्रिया फ्रंट एंड है और दूसरा रेल-एपीआई ऐप है।fetch पैच अनुरोध की अनुमति नहीं है

मैं खुशी से isomorphic-fetch का उपयोग कर रहा हूं जब तक कि मुझे सर्वर पर पैच विधि भेजने की आवश्यकता न हो।

मैं हो रही है:

Fetch API cannot load http://localhost:3000/api/v1/tasks. Method patch is not allowed by Access-Control-Allow-Methods in preflight response. 

लेकिन सर्वर से विकल्प प्रतिक्रिया की एक सूची में एक पैच विधि शामिल पहुंच-नियंत्रण-अनुमति दें-तरीके:

enter image description here

यह कैसे है fetch लागू किया गया है:

const API_URL = 'http://localhost:3000/'            
const API_PATH = 'api/v1/' 

fetch(API_URL + API_PATH + 'tasks', { 
    headers: { 
    'Accept': 'application/json', 
    'Content-Type': 'application/json' 
    }, 
    method: 'patch',                
    body: JSON.stringify({ task: task })           
}) 

पोस्ट, प्राप्त करें, हटाएं बहुत अधिक स्थापित कर रहे हैं और वे ठीक काम कर रहे हैं।

कोई विचार क्या हो रहा है?

अद्यतन: अगर यह इरादा या एक बग है

https://github.com/github/fetch/blob/master/fetch.js#L200

सुनिश्चित नहीं हैं कि करने के लिए:

विधि पैच केस संवेदी है।

अद्यतन 2

यह इरादा है और विधि प्रकार PATCH केस संवेदी की जरूरत है। लाइन अपडेट किया जा रहा करने के लिए विधि लाने से:

method: 'PATCH' 

समस्या ठीक करता है।

https://github.com/github/fetch/issues/254

+0

ऐसा लगता है कि वहाँ एक बग हो सकता है आइसोमोर्फिक-फेच में अनुरोध के रूप में काम करेगा यदि मैं विधि नाम को POST में बदल दूंगा लेकिन पोस्ट के लिए यह असंवेदनशील है, हटाएं .... – Kocur4d

+0

एक साइड नोट के रूप में, 'विकल्प' के जवाब में अनुमत विधियों के लिए शीर्षलेख अनुरोध है 'अनुमति दें:'। आपकी प्रतिक्रिया एक अलग शीर्षलेख ('पहुंच-नियंत्रण-अनुमति-विधियों:') का उपयोग कर रही है। – drhining

+0

@drhining क्षमा करें मुझे समझ में नहीं आता है। विकल्प का उपयोग सर्वर से पता लगाने के लिए किया जाता है, जिन्हें अनुरोधों को कोरस करने की अनुमति है। 'एक्सेस-कंट्रोल-स्वीकृति-विधि:' सभी स्वीकृत तरीकों की सूची देता है ताकि पैच की अनुमति हो। "मुद्दा" fetch लाइब्रेरी के साथ स्वयं है और यह – Kocur4d

उत्तर

3

मैं reactJS सामने अंत के साथ एक बहुत समान समस्या थी और रैक का उपयोग कर एपीआई रेल :: Cors, और अनुमति के तरीकों की सूची में patch जोड़ने मेरे लिए समस्या हल हो।

config.middleware.insert_before 0, Rack::Cors do 
    allow do 
    origins '*' 
    resource '*', headers: :any, methods: [:get, :post, :patch, :options] 
    end 
end 
+0

इस समाधान ने मुझे PHP में अपने पृष्ठ पर अपनी जावास्क्रिप्ट 'fetch' समस्या को ठीक करने में मदद की। मैंने अपना समाधान जोड़ा। – Noitidart

1

मुझे यह त्रुटि थी जबकि PATCH सभी कैप्स थे। मुझे यह त्रुटि DELETE और PUT के साथ भी मिल रही थी। मैंने अपने fetch के शीर्षलेखों की जांच की और मैंने OPTIONS विधि देखी।

<?php 
    header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, PATCH'); 

इस के बिना, फ़ायरफ़ॉक्स 53 में मैं जावास्क्रिप्ट त्रुटि मिलती रहती हैं:

NetworkError when attempting to fetch resource.

- मैं isomorphic-fetch lib यहाँ उपयोग कर रहा था https://www.npmjs.com/package/isomorphic-fetch

मेरे लिए ठीक मेरी पीएचपी पेज में जोड़ने के लिए किया गया था

लाने मैं क्या कर रहा था यह था:

try { 
    await fetch('https://my.site.com/', { 
     method: 'PATCH', 
     headers: { 'Content-Type':'application/x-www-form-urlencoded' }, 
     body: 'id=12&day=1' 
    }); 
} catch(ex) { 
    console.error('ex:', ex); 
} 
संबंधित मुद्दे