2015-05-29 1 views
7

Этот issue в репозитории SuperAgent упоминает метод .use для добавления логики для каждого запроса. Например, добавление Authorization заголовка JWT, когда маркер доступен:Метод «.use» для добавления логики по каждому запросу SuperAgent

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

Функция 'запрос', которая экспортируется суперагентной имеют метод 'use'. однако экземпляр 'Request', возвращаемый выполнением' request', делает. Является ли это ошибкой или может быть исправлено без запроса на растяжение, неясно. –

+0

Иными словами, ожидается ошибка, которую вы получаете, исходя из взгляда на источник. В readme также не показан пример вашего использования, поэтому он (ваш usecase) может быть не предназначен для использования. –

ответ

8

вопрос вы связаны не связан ни с какими фиксаций, так что все, что мы можем сделать предположения о том или не эта функция была реализована, а затем удалена или никогда не реализована в первую очередь.

Если вас read through the src, вы увидите, что use только когда-либо определяется на прототипе Request конструктора, то есть он может быть только когда-либо использовали после того, как вы начали строить запрос, as shown in the readme.

Другими словами, проблема заключается в том, что речь идет о функции, которая либо была удалена, либо никогда не существовала. Вместо этого вы должны использовать синтаксис, упомянутый в 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 был выпущен для облегчения установки использовать глобально для запросов суперагента.

 Смежные вопросы

  • Нет связанных вопросов^_^