Clearly SuperAgent supports custom HTTP headers:
request
.post(\'/api/pet\')
.send({ name: \'Manny\', species: \'cat\' })
.set(\'X-API-Key\', \'foobar\'
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
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)
I'd just make a separate module with something like this:
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
The module behaves the same way as superagent but sets default headers before returning the Request
object. See here