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.