在请求标头NPM

时间:2017-09-15 02:19:31

标签: node.js api express npm npm-request

我正在尝试将服务器的IP(在本例中为我的计算机公共IP)发送到HTTPS请求中的另一台服务器以访问其API。我已经完成了服务器身份验证,我有持有令牌。我使用Express和NPM进行服务器端编程。我得到的IP地址如下:

var ipAddress;
publicIp.v4().then(ip => {
  ipAddress = ip;
  console.log(ip);
});

我提出的要求如下。

request({

  //Set the request Method:
  method: 'POST',
  //Set the headers:
  headers: {
    'Content-Type': 'application/json',
    'Authorization': "bearer "+ token,  //Bearer Token
    'X-Originating-Ip': ipAddress  //IP Address
  },
  //Set the URL:
  url: 'end point url here',
  //Set the request body:
  body: JSON.stringify( 'request body here'
  }),
}, function(error, response, body){

  //Alert the response body:
  console.log(body);
  console.log(response.statusCode);
 });
}

我收到401错误。我做过研究,我相信它与发送IP地址有关。我在标题中正确发送了吗?

2 个答案:

答案 0 :(得分:0)

这是一个典型的异步问题。要发送ipAddress,您需要保证已经为其分配了值。

在您的代码中:

var ipAddress;
publicIp.v4().then(ip => {
  ipAddress = ip;
  console.log(ip);
});
// code x

由于publicIp.v4()通常是异步操作(例如,来自OpenDNS的查询),code xipAddress = ip;之前执行,这意味着request(...)语句恰好在publicIp.v4().then(...)之后{1}},它将ipAddress作为undefined执行。

即使request(...)语句在其他地方执行,一段时间之后,也无法保证ipAddress已准备就绪 - publicIp.v4().then(...)可能会耗费大量时间。

要解决此问题,您需要将request(...)放入异步操作的回调中,例如:

var ipAddress;
publicIp.v4().then(ip => {
  ipAddress = ip;
  console.log(ip);
  request(...);
});

答案 1 :(得分:0)

问题很简单。请求标头的“授权”部分存在问题。该行的内容为:

'Authorization': "bearer "+ token,  //Bearer Token

应改为:

'Authorization': "Bearer "+ token,  //Bearer Token

Authorization标头区分大小写。它需要是资本,否则你将被拒绝访问。