2015-05-29 46 views
7

SuperAgent存储库中的此issue提到了在每个请求上添加逻辑的.use方法。例如,当令牌是增加了对智威汤逊的Authorization头可供选择:“.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

由superagent导出的'request'函数没有有一个'use'方法。然而,通过执行'request'返回的'Request'的实例会执行。不管这是否是一个错误,或者可以在没有拉请求的情况下修复,目前还不清楚。 –

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