如何在SuperAgent的每个请求中注入自定义HTTP标头?

Jim*_* G. 13 http-headers npm superagent

显然,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);
     }
   });
Run Code Online (Sandbox Code Playgroud)

我的问题:

  • 如果我通过npm下拉SuperAgent,我如何在SuperAgent的所有请求中注入我自己的HTTP头?
  • 注意:我完全愿意创建一个新的npm包,如果需要,可以扩展SuperAgent.

Chr*_*ini 24

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

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;
Run Code Online (Sandbox Code Playgroud)

用法

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

request.get('/bar').send() // will send the default header
Run Code Online (Sandbox Code Playgroud)

该模块的行为与superagent相同,但在返回Request对象之前设置默认标头.看到这里


Sun*_*arg 6

这可能是迟到的答案,但我使用superagent-use插件在所有请求中注入自定义HTTP标头.首先,您需要安装superagent-use

npm install superagent-use --save
Run Code Online (Sandbox Code Playgroud)

然后要求这样

// using plugin to intercept calls
var request = require('superagent-use')(require('superagent'));
Run Code Online (Sandbox Code Playgroud)

然后将函数添加为middlerware/interceptor

// interceptor used by superagent to add custom header for each request
request.use((req) => {
    req.header.custom_header = any_value;
    return req;
});
Run Code Online (Sandbox Code Playgroud)

最后

request
    .get(url)
    .query({ view: 'jsonView' }) // query string
Run Code Online (Sandbox Code Playgroud)

  • 正是我想要的。谢谢。 (2认同)