使用节点js处理CORS与外部REST API通信

时间:2018-12-20 08:34:45

标签: node.js https cors

我正在尝试通过Angular应用程序调用外部REST API。该API托管在单独的服务器/域上,因此,我们面临着CORS问题。为避免CORS问题,我试图在托管Angular应用程序的服务器上使用node js脚本创建直通服务。但是,当使用request / https模块从节点js脚本进行API调用时,我们会收到连接超时/连接被拒绝的错误。 [注意:我不允许在API末尾/代码的标头中进行任何更改]

当我们尝试使用Postman工具调用API时,我们能够收到响应。根据我对CORS的理解,由于相同的原始策略,出于安全原因,浏览器会阻止跨域请求。使用邮递员工具时,它们不受此政策限制,因此我们使用邮递员工具通过API获得响应。

此外,我还尝试通过命令行ping API服务器,但请求超时(我认为服务器上的ICMP连接已禁用)。

我想知道:

  1. 为什么使用nodejs脚本调用API时为什么拒绝连接?
  2. 有什么方法可以实现与使用节点脚本的Postman工具处理的行为相同的行为?

这是NodeJs脚本及其输出:

const shttp = require('http-https');
const userConf = {
 path: 'https://<API DOMAIN>:5001/<API PATH>/',
 method: 'POST'
};

const appDetails = {
 UserID: 'sandboxadmin',
 Password: 'xxxxx',
 LoginType: 'LOGIN'
};

const httpRequest = shttp.request(userConf, function (res) {
 res.setEncoding('utf8');
 if (res.statusCode == 200) {
  let body = "";
  res.on('data', function (result) {
   body += result;
  });
  res.on('end', function () {
   console.log("API response is\n");
   console.log(body);
  });
 } else {
  console.log('Request failed:' + res.statusCode);
 }
});

httpRequest.on('error', function (e) {
 console.log('Request failed error :: ' + e);
});

httpRequest.write('body=' + JSON.stringify(appDetails));
httpRequest.end();

输出:

Request failed error :: Error: connect ECONNREFUSED 127.0.0.1:80

0 个答案:

没有答案