使用ExpressJS的请求模块在所有传出的http请求中添加标头,是否可能?

时间:2016-05-31 15:00:45

标签: javascript node.js express http-headers httprequest

我正在使用NodeJS的request模块。

我在想, 而不是像文档一样手动添加每个请求中的标题。

离。

var options = {
  url: myuRL,
  headers: {
    'myHeader': 'headerVal'
  }
}

request(options ,callback);

是否可以使用中间件或其他东西在所有请求中注入标头?

我试过创建这个中间件:

const addHeaders = function (req, res, next) {
  req.header('myHeader', 'MyVal');
  next();
};
module.exports = addHeaders;

它适用于所有http请求,但使用request模块创建的请求除外。

注意:我的意思是对所有人传出请求不要传入。

1 个答案:

答案 0 :(得分:1)

来自https://www.npmjs.com/package/request#convenience-methods

request.defaults(options) 此方法返回普通请求API周围的包装器,默认为传递给它的任何选项。

//requests using baseRequest() will set the 'x-token' header 
var baseRequest = request.defaults({
  headers: {'x-token': 'my-token'}
})

您可以将请求模块包装在您自己的模块中,以防止每次重新定义标头,例如,创建myRequest.js

var request = require('request');
var myRequest = request.defaults({
  headers: {'x-token': 'my-token'}
})
module.exports = exports = myRequest;

[编辑]工作示例:

<强> myRequest.js

const request = require('request');
const myRequest = request.defaults({
  headers: {'x-token': 'my-token'}
});
 module.exports = exports = myRequest;

<强> index.js

const myRequest = require('./myRequest.js');
const options = {
  url: 'https://google.com'
};
myRequest(options, (err, res, body) => {
  if (err) {
    console.error(err);
  }
  else {
    console.log(res.req._headers);
  }
});

正在运行index.js

$ node ./index.js
{ 'x-token': 'my-token',
referer: 'https://google.com/',
host: 'www.google.com' }

我已将示例推到https://github.com/agoldis/stackoverflow_37549654

相关问题