出现错误:使用http.request在node.js中执行REST API调用时,getaddrinfo ENOTFOUND

时间:2019-11-22 11:25:46

标签: node.js api http dns getaddrinfo

我已经在node.js中创建了api,该api使用了托管在http://dev.abc.co.in:20081上的api集 并非每次都出现,但有时会引发错误

Error: getaddrinfo ENOTFOUND dev.abc.co.in
    at GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js:60:26) {
  errno: 'ENOTFOUND',
  code: 'ENOTFOUND',
  syscall: 'getaddrinfo',
  hostname: 'dev.abc.co.in'
}

调用这些api我已经使用了请求节点模块,因为我开始遇到此错误,因此我切换到fetch-node npm模块,最后将代码替换为内部节点模块http,但得到相同的错误

这是我使用http.request编写的代码

try{
    const options = {
        hostname: "dev.abc.co.in",
        port : 20081,
        path: "/api/entity/workorder",
        method: Config.method
    };

    if(Config.headers){
        options.headers = Config.headers
    }

    const req = http.request(options, (res) => {

        let data = '';
        res.on('data', (chunk) => {
            data += chunk;
        });
        res.on('end', () => {

            callback(res, data);
        });
        req.socket.destroy();
      }).on("error", (err) => {
        console.log("===Error: ", err);
        callback(null, err);
      });

      if(Config.method!="GET" && Config.body){
        Config.headers["Content-Length"] = Config.body.length;
        req.write(Config.body);
      }

      req.end();
    }catch(e){
        console.log("Exception=====",e);
    }

如与DNS有关的错误消息中所示,因此我尝试使用 节点-pe'require(“ dns”)。lookup(“ dev-vsg.dovertech.co.in”,function(){console.dir(arguments)}) 但仍未解决。

1 个答案:

答案 0 :(得分:1)

1)从您的域名的开头开始省略“ http://”,并在结尾或实际域之后的任何路径中都省略所有斜杠。

2)尝试resolve your hostname

const dns = require('dns');

dns.resolve("testdomain.com", 'ANY', (err, records) => {
  if (err) {
    console.log("Error: ", err);
  } else {
    console.log(records);
  }
});

如果已返回dns记录,那么您将知道这是一个节点js问题,之后我们可以进行进一步调查。如果没有,那么这就是域配置问题。