How can I inject a custom HTTP Header into every request that SuperAgent makes?

前端 未结 3 599
情话喂你
情话喂你 2021-02-07 10:16

Clearly SuperAgent supports custom HTTP headers:

request
   .post(\'/api/pet\')
   .send({ name: \'Manny\', species: \'cat\' })
   .set(\'X-API-Key\', \'foobar\'         


        
相关标签:
3条回答
  • 2021-02-07 10:36

    This could be the late answer but I have used superagent-use plugin to inject a custom HTTP header in all the requests. First of all, you need to install superagent-use

    npm install superagent-use --save
    

    then require like this

    // using plugin to intercept calls
    var request = require('superagent-use')(require('superagent'));
    

    then add the function as middlerware/interceptor

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

    and finally

    request
        .get(url)
        .query({ view: 'jsonView' }) // query string
    
    0 讨论(0)
  • 2021-02-07 10:54

    So in my case I needed to set a csrf token as default header in all my requests. You can write a simple wrapper function like this.

    custom-agent.js

    import SuperAgent from 'superagent';
    
    const csrfToken = document.querySelector('meta[name=csrf-token]').content;
    
    export default {
      fire(method, url) {
        return SuperAgent[method](url).set('X-CSRF-Token', csrfToken);
      }
    };
    

    Use it like this.

    import Agent from './custom-agent'
    
    Agent.fire('get', '/endpoint')
    // => SuperAgent.get('/endpoint').set('X-CSRF-Token', csrfToken)
    
    0 讨论(0)
  • 2021-02-07 10:59

    I'd just make a separate module with something like this:

    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;
    

    Usage

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

    The module behaves the same way as superagent but sets default headers before returning the Request object. See here

    0 讨论(0)
提交回复
热议问题