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.
 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值