2016-02-08 14 views
7

पर प्राप्त नहीं हो सकता है/मैं इस बात पर कुछ नया प्रकाश डाल सकता हूं कि यह क्यों हो रहा है और इसे कैसे डिबग करना है।रिएक्ट राउटर ऑनर फ़ंक्शन

मैं निम्नलिखित मार्गों को परिभाषित किया है:

function requireAuth(nextState, transition) { 
    transition.to("/login"); 
} 

अगर मैं छोड़:

export default (withHistory, onUpdate) => { 
    const history = withHistory? 
       (Modernizr.history ? 
       new BrowserHistory 
       : new HashHistory) 
      : null; 
    return (
    <Router history={history}> 
     <Route path='/login' component={Login} /> 
     <Route path='/' component={Home} onEnter={requireAuth} /> 
    </Router> 
); 
}; 

requireAuth यदि उपयोगकर्ता के प्रवेश की जाँच करें और उन्हें लॉगिन पृष्ठ पर रीडायरेक्ट नहीं तो माना जाता है transtion.to रूट यूआरएल में कॉल करें और ब्राउज़ करें, मुझे बस एक संदेश दिखाई देता है जो कहता है, "डीबगर में कोई त्रुटि संदेश नहीं" प्राप्त नहीं हो सकता है। उस रेखा पर ब्रेकपॉइंट डालने से कुछ भी नहीं लगता है।

विशेष रूप से अजीब बात यह है कि यदि मैं transition.to(...) को debugger; कथन के साथ प्रतिस्थापित करता हूं, तो विधि को कॉल किया जाता है और रूटिंग पूरी तरह से ठीक काम करता है।

मुझे किसी चीज़ पर किसी गलत विचार, किसी भी विचार पर क्या होना चाहिए?

संपादित करें: मुझे उस नेविगेटिंग को host:port/login पर ठीक करना चाहिए, इसलिए मुझे login मार्ग कार्य पता है।

+1

प्रतिक्रिया-राउटर का कौन सा संस्करण? 1.x? – walkerrandophsmith

+0

मैं प्रतिक्रिया-राउटर के संस्करण 1.0.0-बीटा 3 का उपयोग कर रहा हूं। मैंने जिस संस्करण का उपयोग कर रहा था उसे अपग्रेड करने का प्रयास किया, लेकिन मैंने इसे एक आसान तरीका हल करने के लिए समाप्त कर दिया। – shieldstroy

उत्तर

2

एक कोणीय पृष्ठभूमि से आ रहा है मैंने गलत तरीके से माना था कि रूटिंग पूरी तरह क्लाइंट-साइड हो रही थी। क्लाइंट-साइड और सर्वर साइड रूटिंग दोनों के लिए प्रतिक्रिया-राउटर का उपयोग करना संभव है।

transition.to कॉल क्लाइंट-साइड पर ठीक काम करता था, लेकिन सर्वर-साइड रूटिंग में लात मारकर एक अपवाद फेंक दिया और Cannot GET / पृष्ठ लौटा दिया। अपवाद पकड़ा जा रहा था लेकिन कुछ भी लॉग इन नहीं किया गया।

मैं एक अतिरिक्त अगर बयान को देखने के लिए अगर हम ग्राहक पर चल गया:

if(window.location) { 
    if(!loggedIn) { 
     transition.to("/login"); 
    } 
} 

संभवतः इस संभाल करने के लिए एक बेहतर तरीका है और अगर मुझे लगता है कि यह पता लगाने के अंत में मैं अपने जवाब अपडेट करेंगे।

0

वर्तमान दस्तावेज़ों के मुताबिक, onEnter हुक replace फ़ंक्शन को इसके दूसरे पैरा के रूप में प्राप्त करता है। यानी

type EnterHook = (nextState: RouterState, replace: RedirectFunction, callback?: Function) => any; 

क्या आप प्रतिक्रिया-राउटर का एक अलग संस्करण उपयोग कर रहे हैं? मैंने onEnter हुक के लिए वैकल्पिक संस्करण दस्तावेज़ों को देखने का प्रयास किया जो transition ऑब्जेक्ट को इसके दूसरे परम के रूप में लेता है, लेकिन मुझे कुछ भी खोजने में बहुत भाग्य नहीं था।

+0

मैं प्रतिक्रिया-राउटर के संस्करण 1.0.0-बीटा 3 का उपयोग कर रहा हूं, जो संक्रमण ऑब्जेक्ट को पास करता है और प्रतिस्थापन फ़ंक्शन नहीं। मैंने जिस संस्करण का उपयोग कर रहा था उसे अपग्रेड करने का प्रयास किया, लेकिन मैंने इसे एक आसान तरीका हल करने के लिए समाप्त कर दिया। – shieldstroy

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