2015-05-29 10 views
7

Ta issue w repozytorium SuperAgent wymienia metodę .use, aby dodać logikę do każdego żądania. Na przykład, dodając Authorization nagłówek JWT, gdy znacznik jest dostępny:Metoda ".use" do dodawania logiki do każdego żądania SuperAgent

superagent.use(bearer); 

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

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

Chociaż ostatni komentarz informuje, że funkcja ta działa ponownie, nie mogę uczynić go do pracy.

następujący kod testu:

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); 
} 

zwraca ten błąd:

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

Proszę wyjaśnić powody odrzucenia pytania: http://meta.stackexchange.com/questions/135/encouraging-people-to-explain-downvotes –

+0

Funkcja 'request' wyeksportowana przez superagenta nie mieć metodę "use". jednak wystąpienie 'Request' zwrócone przez wykonanie' request' ma. To, czy jest to błąd, czy może być naprawione bez żądania ściągnięcia, jest niejasne. –

+0

Innymi słowy, oczekiwany błąd jest oczekiwany, na podstawie spojrzenia na źródło. Plik readme nie pokazuje również przykładu twojego użycia, więc (Twój przypadek użycia) może nie być zamierzonym użyciem. –

Odpowiedz

8

Kwestia jesteś związana nie jest związana z żadnym zobowiązuje, więc wszystko, co możemy zrobić, to spekulować na temat tego, czy nie, ta funkcja została zaimplementowana, a następnie usunięta, lub nigdy nie zaimplementowana w pierwszej kolejności.

jeśli read through the src, widać że use jest zawsze tylko zdefiniowane na prototypie konstruktora Request, dzięki czemu można ją tylko kiedykolwiek być stosowany po tym, jak zaczął konstruowania wniosku, as shown in the readme.

Innymi słowy, problem wydaje się dotyczyć funkcji, która została usunięta lub nigdy nie istniała. Powinieneś zamiast tego użyć składni wspomnianej w 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); 
    } 
} 

Można oczywiście utworzyć własne opakowanie, dzięki czemu nie trzeba tego robić dla każdego żądania.

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 
}); 
Powiązane problemy