如何将自定义 HTTP 标头注入 SuperAgent 发出的每个请求?
Posted
技术标签:
【中文标题】如何将自定义 HTTP 标头注入 SuperAgent 发出的每个请求?【英文标题】:How can I inject a custom HTTP Header into every request that SuperAgent makes? 【发布时间】:2015-09-12 14:21:04 【问题描述】:显然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 标头? 注意:如有必要,我完全愿意创建一个扩展 SuperAgent 的新 npm 包。【问题讨论】:
【参考方案1】:我只是用这样的东西制作一个单独的模块:
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
对象之前设置默认标头。见here
【讨论】:
TypeError: request.get 不是函数 这对您有什么帮助?获取 TypeError: request.get 也不是函数 我认为您需要将方法提供为字符串而不是 request.get,尝试 request('get', 'url').send()【参考方案2】:所以在我的情况下,我需要在所有请求中将 csrf 令牌设置为默认标头。你可以像这样写一个简单的包装函数。
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)
【讨论】:
【参考方案3】:这可能是迟到的答案,但我已使用 superagent-use
插件在所有请求中注入自定义 HTTP 标头。首先需要安装superagent-use
npm install superagent-use --save
然后像这样要求
// using plugin to intercept calls
var request = require('superagent-use')(require('superagent'));
然后将函数添加为中间件/拦截器
// 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
【讨论】:
以上是关于如何将自定义 HTTP 标头注入 SuperAgent 发出的每个请求?的主要内容,如果未能解决你的问题,请参考以下文章
如何将自定义 HTTP 请求标头添加到 Thymeleaf 生成的表单或链接?
如何在 PowerShell 中运行 appCmd 以将自定义标头添加到默认网站
如何将自定义响应标头添加到来自 azure blob 的响应?