如何将自定义 HTTP Header 注入到 SuperAgent 发出的每个请求中?
How can I inject a custom HTTP Header into every request that SuperAgent makes?
显然 SuperAgent 支持自定义 HTTP headers:
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 header?
- 注意:如果需要,我完全愿意创建一个扩展 SuperAgent 的新 npm 包。
我只是用这样的东西制作一个单独的模块:
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
该模块的行为方式与 superagent 相同,但在返回 Request
object 之前设置默认值 headers。参见 here
所以在我的例子中,我需要在所有请求中将 csrf 令牌设置为默认 header。您可以像这样编写一个简单的包装函数。
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);
}
};
像这样使用它。
import Agent from './custom-agent'
Agent.fire('get', '/endpoint')
// => SuperAgent.get('/endpoint').set('X-CSRF-Token', csrfToken)
这可能是迟到的答案,但我已经使用 superagent-use
插件在所有请求中注入自定义 HTTP header。首先,你需要安装superagent-use
npm install superagent-use --save
然后这样要求
// using plugin to intercept calls
var request = require('superagent-use')(require('superagent'));
然后将函数添加为 middlerware/interceptor
// interceptor used by superagent to add custom header for each request
request.use((req) => {
req.header.custom_header = any_value;
return req;
});
最后
request
.get(url)
.query({ view: 'jsonView' }) // query string
显然 SuperAgent 支持自定义 HTTP headers:
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 header?
- 注意:如果需要,我完全愿意创建一个扩展 SuperAgent 的新 npm 包。
我只是用这样的东西制作一个单独的模块:
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
该模块的行为方式与 superagent 相同,但在返回 Request
object 之前设置默认值 headers。参见 here
所以在我的例子中,我需要在所有请求中将 csrf 令牌设置为默认 header。您可以像这样编写一个简单的包装函数。
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);
}
};
像这样使用它。
import Agent from './custom-agent'
Agent.fire('get', '/endpoint')
// => SuperAgent.get('/endpoint').set('X-CSRF-Token', csrfToken)
这可能是迟到的答案,但我已经使用 superagent-use
插件在所有请求中注入自定义 HTTP header。首先,你需要安装superagent-use
npm install superagent-use --save
然后这样要求
// using plugin to intercept calls
var request = require('superagent-use')(require('superagent'));
然后将函数添加为 middlerware/interceptor
// interceptor used by superagent to add custom header for each request
request.use((req) => {
req.header.custom_header = any_value;
return req;
});
最后
request
.get(url)
.query({ view: 'jsonView' }) // query string