node请求java接口的api地址报错error:getaddrinfo ENOTFOUND

1、问题

node服务器用如下代码请求java接口,项目中本地hostname是localhost所以不会报错,但是部署到正式环境后报错error:getaddrinfo ENOTFOUND www.xxxx.com  www.xxxx.com:8080

var opt = {//请求属性
        hostname: 'http://www.xxxx.com',
        port: '8080',
        method: 'POST',
        path: path,
        headers: {
            "Content-Type": 'application/json;charset=utf-8',
        }
    }
 

2、解决

因为hostname只填写实际的主机名,把hostname中的http://或https://去掉(path中在填写具体路径),就可以正常请求了。

另外,path路径也不要错了,否则会返回404,在项目中遇到过由于更新版本java那边把接口路径改了,node这边不知道,然后请求返回的数据一直404路径错误!

还有一种情况会导致这个报错:

在新的服务器上部署node以后,使用pm2 作为进程管理工具,安装完成以后,pm2 无论执行 pm2 list 还是pm2 的其它命令,全部报Error: getaddrinfo ENOTFOUND的错误。

仔细检查安装都没问题,上git pm2的issue搜索发现,居然是hosts的原因导致的。

默认centos的 hosts 会把本地 127.0.0.1 localhost 注释掉,去掉再试下就可以了。

参见git pm2 issue:

https://github.com/Unitech/pm2/issues/324 

原解答:
My fault! My deployment scripts were accidentally deleting the localhost from the /etc/hosts file, making it impossible to nodejs find the local machine.
 

你可能感兴趣的:(nodejs)