这个问题在SuperAgent存储库中提到了对每个请求添加逻辑的.use方法。例如,当令牌可用时,为JWT添加一个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发布于 2015-05-29 20:10:09
您链接到的问题没有链接到任何提交,所以我们所能做的就是推测该特性是否已经实现,然后删除,或者从一开始就没有实现。
如果您使用阅读src,您将看到use只在Request构造器的原型上定义过,这意味着只有在您开始构建请求如自述文件所示之后才能使用它。
换句话说,这个问题似乎是在谈论一个已经被删除或者根本不存在的特性。您应该使用自述的语法。
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
});发布于 2016-02-28 13:59:35
最近,发布了包超级剂-用途,以便于设置超级代理请求的全局使用。
https://stackoverflow.com/questions/30537899
复制相似问题