显然SuperAgent支持自定义HTTP标头:

request
   .post('/api/pet')
   .send({ name: 'Manny', species: 'cat' })
   .set('X-API-Key', 'foobar')
   .set('Accept', 'application/json')
   .end(function(err, res){
     if (res.ok) {
       alert('yay got ' + JSON.stringify(res.body));
     } else {
       alert('Oh no! error ' + res.text);
     }
   });


我的问题:


如果我通过npm拉下SuperAgent,如何在SuperAgent发出的所有请求中注入自己的HTTP标头?
注意:如果有必要,我愿意创建一个新的npm软件包来扩展SuperAgent。

最佳答案

我只是用这样的东西制作一个单独的模块:

myagent.js

var superagent = require('superagent');

var defaultHeaders = {};
function isObject(obj) { return Object(obj) === obj; };

function request(method, url) {
   return superagent(method, url).set(defaultHeaders);
}

request.set = function (field, value) {
   if (isObject(field)) {
      for(var key in field) this.set(key, field[key]);
      return this;
   }
   defaultHeaders[field] = value;
   return this;
}
module.exports = request;


用法

var request = require('./myagent');
request.set({'X-My-Header': 'foo'}); // sets the default

request.get('/bar').send() // will send the default header


该模块的行为与超级代理相同,但是在返回Request对象之前设置默认标头。见here

09-16 19:33