2015-11-30 6 views
29

मैं डीबग में मदद करने के लिए प्रतिक्रियात्मक मूल में अपने नेटवर्क अनुरोध देखना चाहता हूं - आदर्श रूप से क्रोम के devtools के 'नेटवर्क' टैब में।मैं प्रतिक्रिया मूल में नेटवर्क अनुरोध (डीबगिंग के लिए) कैसे देख सकता हूं?

गिटहब (https://github.com/facebook/react-native/issues/4122 और https://github.com/facebook/react-native/issues/934) पर इसके बारे में कुछ बंद मुद्दे हैं, लेकिन मैं उन्हें पूरी तरह से समझ नहीं पा रहा हूं। ऐसा लगता है कि मुझे कुछ प्रतिक्रियात्मक मूलभूत पॉलीफिल को पूर्ववत करने की आवश्यकता है और फिर अतिरिक्त डीबगिंग झंडे के साथ कुछ कमांड चलाएं, और शायद कुछ क्रोम सुरक्षा सेटिंग्स को संशोधित करें? और स्पष्ट रूप से ऐसा करने में कुछ सुरक्षा मुद्दे शामिल हैं जो इसे एक भयानक विचार बना सकते हैं, लेकिन धागे में शामिल कोई भी व्यक्ति स्पष्ट रूप से बताता है कि वे क्या हैं।

कोई व्यक्ति प्रतिक्रिया टैब के साथ काम कर रहे नेटवर्क टैब को प्राप्त करने के साथ-साथ ऐसा करने में शामिल सुरक्षा समस्याओं के स्पष्टीकरण के लिए एक चरण-दर-चरण मार्गदर्शिका प्रदान कर सकता है? js जहां अनुरोध या प्रतिक्रिया

उत्तर

-10

जोड़ें डीबगर।

var React = require('react-native'); 
delete GLOBAL.XMLHttpRequest; 

यह मेरे लिए समान मूल अनुरोधों के लिए काम करता है। सुनिश्चित नहीं है कि आपको क्रॉस मूल के लिए काम करने के लिए क्रोम में CORS को अक्षम करने की आवश्यकता है या नहीं।

4

मैं polyfill कि प्रतिक्रिया मूल निवासी प्रतिक्रिया मूल निवासी आयात करने के बाद प्रदान करता है को हटाने के द्वारा Chrome में अपनी अनुरोधों डिबग करने के लिए कर रहा था देख सकते हैं में

+0

क्या एक "एक ही मूल" एक से किए गए अनुरोधों के संदर्भ में अनुरोध, घरेलू एप्लिकेशन प्रतिक्रिया है? एक जो डीबगर के रूप में एक ही डोमेन पर है (यानी शायद स्थानीयहोस्ट)? –

+0

मेरे मामले के लिए आपको क्रॉस मूल के लिए काम करने के लिए क्रोम में CORS को अक्षम करना होगा। इस क्रोम प्लगइन की जांच करें: https: //chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi? hl = fr –

+0

@MouhamedHalloul क्या आप समझा सकते हैं कि आपने इस प्लगइन का उपयोग कैसे किया? – alexmngn

1

मैं आपके नेटवर्क अनुरोधों का निरीक्षण करने के लिए चार्ल्स का उपयोग करने का सुझाव देता हूं। यह वास्तव में अच्छा है और अधिक दृश्यता प्रदान करता है और आपको उन्नत सामग्री करने की अनुमति देता है। frevib नीचे अधिक संक्षिप्त वाक्य रचना से जुड़ा हुआ:

http://charlesproxy.com

+1

बस चार्ल्स की कोशिश की और ऐसा लगता है कि केवल 'http: // localhost: 8081 /index.android.bundle? platform = android & dev = true' .. इसे सभी अनुरोधों को कैप्चर करने के लिए कैसे करें? (मैं बाहरी एपीआई मार रहा हूं) – jakeed1

+0

क्या आपका बाहरी एपीआई HTTPS का उपयोग करता है? यदि ऐसा है, तो आपको चार्ल्स को उनको पकड़ने के लिए थोड़ा सा कॉन्फ़िगर करने की आवश्यकता है। –

43

यह वही है मैं अपने ऐप

const _XHR = GLOBAL.originalXMLHttpRequest ? 
    GLOBAL.originalXMLHttpRequest :   
    GLOBAL.XMLHttpRequest      

XMLHttpRequest = _XHR 

संपादित की प्रवेश बिंदु में प्रयोग कर रहे है। धन्यवाद frevib!

GLOBAL.XMLHttpRequest = GLOBAL.originalXMLHttpRequest || GLOBAL.XMLHttpRequest; 

स्पष्टीकरण:

GLOBAL.originalXMLHttpRequest संदर्भित करता है क्रोम देव उपकरण एक्सएचआर की नकल। यह आरएन द्वारा बच निकलने के रूप में प्रदान किया जाता है। श्वेतुसिया का समाधान केवल तभी काम करेगा जब देव उपकरण खुले होते हैं और इस प्रकार XMLHttpRequest प्रदान करते हैं।

संपादित करें: आपको डीबगर मोड में क्रॉस मूल अनुरोधों को अनुमति देने की आवश्यकता होगी। क्रोम के साथ आप this handy plugin का उपयोग कर सकते हैं।

संपादित करें: Read about the RN github issue है कि मुझे इस समाधान

+1

कोड के उस टुकड़े को रखने के बाद मैं डेवलपर कंसोल में अनुरोध देखने में सक्षम हूं लेकिन मेरा पूरा अनुरोध 404 स्थिति के साथ विफल रहता है। किसी को भी कोई विचार है कि ऐसा क्यों हो सकता है? –

+0

XMLHttpRequest परिभाषित नहीं किया गया है :( –

+1

यह काम करता है। इसे [गीथब] से लिया [https://github.com/facebook/react-native/issues/934#issuecomment-269811544) – frevib

10

मैं अपने ऐप्लिकेशन में निम्नलिखित (आपका मुख्य app.js प्रवेश बिंदु फ़ाइल में इस जोड़े) का उपयोग करने के लिए नेतृत्व:

// To see all the requests in the chrome Dev tools in the network tab. 
XMLHttpRequest = GLOBAL.originalXMLHttpRequest ? 
    GLOBAL.originalXMLHttpRequest : 
    GLOBAL.XMLHttpRequest; 

    // fetch logger 
global._fetch = fetch; 
global.fetch = function (uri, options, ...args) { 
    return global._fetch(uri, options, ...args).then((response) => { 
    console.log('Fetch', { request: { uri, options, ...args }, response }); 
    return response; 
    }); 
}; 

सबसे अच्छी बात यह है कि यह कंसोल में fetch लॉग भी दिखाता है जो अच्छी तरह से स्वरूपित हैं।

स्क्रीनशॉट:

enter image description here

नेटवर्क टैब पर:

enter image description here

+0

प्रतिक्रिया-मूल काम करने की पुष्टि! धन्यवाद। – PubNub

5

मैं जानता हूँ कि यह एक पुराने सवाल यह है, लेकिन अब यह करने के लिए है कि नहीं है एक अधिक सुरक्षित तरीका है सीओआरएस को अक्षम करने या प्रतिक्रिया मूल स्रोत कोड को बदलने की आवश्यकता है। आप Reactotron कहा जाता है एक तीसरी पार्टी पुस्तकालय है कि न केवल API कॉल (नेटवर्क प्लगइन का उपयोग) पटरियों का उपयोग कर सकते, लेकिन यह भी अतिरिक्त सेटअप के साथ अपने Redux दुकान ट्रैक कर सकते हैं, और गाथा:

https://github.com/infinitered/reactotron https://github.com/infinitered/reactotron/blob/master/docs/plugin-networking.md

+0

रेक्टोट्रॉन केवल तभी काम करता था जब आपने एपिसॉस नामक बाहरी लाइब्रेरी का उपयोग किया था।यह सामान्य fetch के लिए काम नहीं करता है। इसलिए यदि आप अपने ऐप में बाहरी पुस्तकालयों द्वारा भेजे गए अनुरोधों की निगरानी करना चाहते हैं, तो रिएक्टोट्रॉन अच्छा नहीं है। –

+0

@ विलेमीक-ओजा वास्तव में रिएक्ट्रॉन मार्च से प्राप्त होने के साथ नेटवर्किंग का समर्थन करता है, यह सिर्फ दस्तावेज पुराना था। मैंने इसे स्वयं करने की कोशिश की, और इसे रीडेमे पर सही किया :) –

0

अतीत में मैंने अपने एपीआई अनुरोधों को ट्रैक करने के लिए GLOBAL.XMLHttpRequest हैक का उपयोग किया लेकिन कभी-कभी यह बहुत धीमा होता है और संपत्ति अनुरोधों के लिए काम नहीं करता है। मैंने फोन से बाहर जाने वाले HTTP संचार का निरीक्षण करने के लिए Postman’s proxy सुविधा का उपयोग करने का निर्णय लिया। जानकारी के लिए official documentation को देखो, लेकिन मूल रूप से, वहाँ तीन आसान चरणों हैं:

  • डाकिया में प्रॉक्सी सेट करें
  • में अपने मोबाइल डिवाइस पर अपने कंप्यूटर के आईपी पते ($ ifconfig)
  • कॉन्फ़िगर HTTP प्रॉक्सी की जाँच करें वाईफाई सेटिंग्स
0

कृपया इस कोड से सावधान रहें।

XMLHttpRequest = GLOBAL.originalXMLHttpRequest ? 
    GLOBAL.originalXMLHttpRequest : GLOBAL.XMLHttpRequest; 

यह मदद करता है और यह बहुत अच्छा है लेकिन यह अपलोड को नष्ट कर देता है। मैं यह जानने का प्रयास करने में 2 दिन बिताता हूं कि अपलोड की गई फाइलें वास्तविक फ़ाइल के बजाय [ऑब्जेक्ट ऑब्जेक्ट] क्यों भेज रही हैं। कारण ऊपर एक कोड है।

नियमित कॉल के लिए नहीं है, लेकिन बहुखण्डीय/फार्म-डेटा के लिए इसका इस्तेमाल कॉल

संबंधित मुद्दे

 संबंधित मुद्दे