2015-05-29 8 views
7

के प्रत्येक अनुरोध पर तर्क जोड़ने के लिए ".use" विधि SuperAgent रिपॉजिटरी में यह issue प्रत्येक अनुरोध पर तर्क जोड़ने के लिए .use विधि का उल्लेख करता है। उदाहरण के लिए, जेडब्ल्यूटी के लिए एक Authorization हेडर को जोड़े जब एक टोकन उपलब्ध है:सुपरएजेंट

superagent.use(bearer); 

function bearer (request) { 
    var token = sessionStorage.get('token'); 

    if (token) request.set('Authorization', 'Bearer ' + token); 
} 

हालांकि पिछले टिप्पणी सूचित करता है कि इस सुविधा फिर से काम कर रहा है, मैं इसे काम करने के लिए नहीं कर सकता।

निम्नलिखित परीक्षण कोड:

var request = require('superagent'); 

request.use(bearer); 

function bearer (request) 
{ 
    // "config" is a global var where token and other stuff resides 
    if (config.token) request.set('Authorization', 'Bearer ' + config.token); 
} 

रिटर्न इस त्रुटि:

request.use(bearer); 
     ^
TypeError: undefined is not a function 
+1

कृपया, कारणों को बताएं कि आपने सवाल क्यों कम किया है: http://meta.stackexchange.com/questions/135/encouraging-people-to-explain-downvotes –

+0

'अनुरोध' फ़ंक्शन जिसे सुपरएजेंट द्वारा निर्यात किया गया है, वह नहीं है एक 'उपयोग' विधि है। हालांकि, 'अनुरोध' का उदाहरण जो 'अनुरोध' निष्पादित करके वापस किया जाता है। चाहे यह एक बग है या नहीं, या पुल अनुरोध के बिना तय किया जा सकता है अस्पष्ट है। –

+0

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

उत्तर

8

मुद्दा आप के लिए किसी भी प्रतिबद्ध से लिंक नहीं है जुड़ा हुआ है, इसलिए सभी हम क्या कर सकते हैं या पर अटकलें है उस सुविधा को लागू नहीं किया गया था और फिर हटा दिया गया था, या पहले स्थान पर कभी लागू नहीं किया गया था।

यदि आप read through the src, तो आप उस use ही कभी Request निर्माता के प्रोटोटाइप पर परिभाषित किया गया है देखेंगे, जिसका अर्थ यह भी है तो केवल तुम्हारे जाने के बाद एक अनुरोध, as shown in the readme निर्माण शुरू कर दिया गया है इस्तेमाल किया जा सकता।

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

var request = require('superagent'); 

request 
.get('/some-url') 
.use(bearer) // affects **only** this request 
.end(function(err, res){ 
    // Do something 
}); 

function bearer (request){ 
    // "config" is a global var where token and other stuff resides 
    if (config.token) { 
     request.set('Authorization', 'Bearer ' + config.token); 
    } 
} 

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

var superagent = require('superagent'); 

function request(method, url) { 
    // callback 
    if ('function' == typeof url) { 
     return new superagent.Request('GET', method).end(url).use(bearer); 
    } 

    // url first 
    if (1 == arguments.length) { 
     return new superagent.Request('GET', method).use(bearer); 
    } 

    return new superagent.Request(method, url).use(bearer); 
} 
// re-implement the .get and .post helpers if you feel they're important.. 

function bearer (request){ 
    // "config" is a global var where token and other stuff resides 
    if (config.token) { 
     request.set('Authorization', 'Bearer ' + config.token); 
    } 
} 

request('GET', '/some-url') 
.end(function(err, res){ 
    // Do something 
}); 
1

हाल पैकेज superagent-use superagent अनुरोधों के लिए विश्व स्तर पर उपयोग की स्थापना की सुविधा के लिए जारी की गई है।