Javascript 针对Azure CORS webservice的IIS节点下的节点http请求失败-getaddrinfo ENOTFOUND
当纯粹在节点下运行时,一切都能正常工作,只要我尝试在IIS节点下运行,每次使用getaddrinfo上的ENOTFOUND,节点http请求都会失败。这是一个中型网站的一部分,其他所有内容都在节点和IIS节点下工作,只是对Azure CORS web服务的请求失败了。我对谷歌地图也有类似的web服务请求,在这两种环境中都能完美地工作。谷歌地图和Azure web服务调用都使用相同的共享代码来处理请求Javascript 针对Azure CORS webservice的IIS节点下的节点http请求失败-getaddrinfo ENOTFOUND,javascript,node.js,azure,cors,iisnode,Javascript,Node.js,Azure,Cors,Iisnode,当纯粹在节点下运行时,一切都能正常工作,只要我尝试在IIS节点下运行,每次使用getaddrinfo上的ENOTFOUND,节点http请求都会失败。这是一个中型网站的一部分,其他所有内容都在节点和IIS节点下工作,只是对Azure CORS web服务的请求失败了。我对谷歌地图也有类似的web服务请求,在这两种环境中都能完美地工作。谷歌地图和Azure web服务调用都使用相同的共享代码来处理请求 // Simplified //================================
// Simplified
//==================================
var http = require("http")
var options = {
host: "xxx.azurewebsites.net",
path: "/address?postcode=SL6+1PB",
headers: {
"SerialNo": "xxx",
"RegKey": "xxx",
"Company": "xxx"
}
};
req = https.request(options, callback);
req.end();
// The Whole thing
//===========================
function getData(host, port, path, headers, data, secure) {
return new promise(function(resolve, reject) {
var options = {}, req;
try {
options.host = host;
if(!!port) {options.port = port;}
if(!!data) {options.method = "POST";}
if(!!path) {options.path = path.replace(/\s+/g, "+");}
if(!!headers) {options.headers = headers;}
if(!!secure) {req = https.request(options, callback);}
else {req = http.request(options, callback);}
req.on("error", function(error) {
rejectPromise(reject, error, "datahttp.getData");
});
if(!!data) {req.write((typeof(data) === "object" ? JSON.stringify(data) : data));}
req.end();
}
catch(error) {
// This error object drops the message property on stringify
error = {method: "datahttp.getData", success: false, message: error.message};
rejectPromise(reject, error, "datahttp.getData");
}
function callback(response) {
var str = "";
//another chunk of data has been received, so append it to `str`
response.on("data", function(chunk) {
str += String(chunk);
});
// the whole response has been received
response.on("end", function () {
if(response.statusCode == 200) {
try {
switch(response.headers["content-type"].split(";")[0]) {
case "application/xml":
xmlToJSN(str)
.then(function(result) {
resolve({method: "datahttp.getData", success: true, data: result});
})
.catch(function(error) {
rejectPromise(reject, error, "datahttp.getData");
});
break;
case "application/json":
resolve({method: "datahttp.getData", success: true, data: JSON.parse(str)});
break;
default:
resolve({method: "datahttp.getData", success: true, data: str});
}
}
catch(error) {
rejectPromise(reject, error, "datahttp.getData");
}
}
else {
rejectPromise(reject, {message: response.statusMessage + " (" + response.statusCode + ")"}, "datahttp.getData");
}
});
response.on("error", function(error) {
rejectPromise(reject, error, "datahttp.getData");
});
}
});
}
我已经为此挣扎了几天,很明显,我没有看到一些非常明显的东西,一些帮助和一记耳光将是受欢迎的
Stack Trace
====================
Trace: { [Error: getaddrinfo ENOTFOUND daaddressing-prod-ne.azurewebsites.net/ daaddressing-prod-ne.azurewebsites.net/:80]
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'daaddressing-prod-ne.azurewebsites.net/',
host: 'daaddressing-prod-ne.azurewebsites.net/',
port: 80 }
at ClientRequest.<anonymous> (C:\Dev\Node\acinet_flint\server\datahttp.js:47:29)
at emitOne (events.js:77:13)
at ClientRequest.emit (events.js:169:7)
at Socket.socketErrorListener (_http_client.js:269:9)
at emitOne (events.js:77:13)
at Socket.emit (events.js:169:7)
at connectErrorNT (net.js:1012:8)
at nextTickCallbackWith2Args (node.js:442:9)
at process._tickCallback (node.js:356:17)
{ [Error: getaddrinfo ENOTFOUND daaddressing-prod-ne.azurewebsites.net/ daaddressing-prod-ne.azurewebsites.net/:80]
code: 'ENOTFOUND',
errno: 'ENOTFOUND',
syscall: 'getaddrinfo',
hostname: 'daaddressing-prod-ne.azurewebsites.net/',
host: 'daaddressing-prod-ne.azurewebsites.net/',
port: 80,
service: 'acinet',
success: false,
method: 'datahttp.getData' }
堆栈跟踪
====================
跟踪:{[Error:getaddrinfo ENOTFOUND daaddressing-prod-ne.azurewebsites.net/daaddressing prod ne.azurewebsites.net/:80]
代码:“ENOTFOUND”,
errno:'ENOTFOUND',
系统调用:“getaddrinfo”,
主机名:'daaddressing prod ne.azurewebsites.net/',
主机:“daaddressing prod ne.azurewebsites.net/”,
端口:80}
在ClientRequest。(C:\Dev\Node\acite\u flint\server\datahttp.js:47:29)
在emitOne(events.js:77:13)
在ClientRequest.emit(events.js:169:7)
位于Socket.socketErrorListener(_http_client.js:269:9)
在emitOne(events.js:77:13)
位于Socket.emit(events.js:169:7)
在connectErrorNT(net.js:1012:8)
在下一个TTickCallbackwith2args(node.js:442:9)
在进程中调用(node.js:356:17)
{[错误:getaddrinfo ENOTFOUND daaddressing-prod-ne.azurewebsites.net/daaddressing prod ne.azurewebsites.net/:80]
代码:“ENOTFOUND”,
errno:'ENOTFOUND',
系统调用:“getaddrinfo”,
主机名:'daaddressing prod ne.azurewebsites.net/',
主机:“daaddressing prod ne.azurewebsites.net/”,
港口:80,
服务:'acinet',
成功:错,
方法:'datahttp.getData'}
我们可以用堆栈跟踪来处理该错误吗?此时,daaddressing-prod-ne.azurewebsites.net/给出了一个404错误,我用您的代码片段进行了测试:req=http.request(选项,回调)
针对您的服务器,它是daaddressing prod ne.azurewebsites.net/address?postcode=SL6+1PB
,它在IISNode env中的Azure Web应用程序上运行良好。你能提供更多关于你的客户环境的细节吗?好的,我终于发现了问题,这是一个非常愚蠢的问题。。。使用主机字符串“daaddressing prod ne.azurewebsites.net/”在节点下工作正常,但在IIS节点下失败,只需从主机末尾删除“/”,它在两种环境下都能工作,为什么这种情况让我大吃一惊。在纯节点下,尾随斜杠似乎不起作用问题是我的配置,IIS节点配置有尾随斜杠,但在纯节点下我没有,我必须对这些值进行100次比较,但没有找到它。感谢您的帮助,我很抱歉遗漏了一些如此简单的错误,我们可以用堆栈跟踪来处理该错误吗?在这个恰当的时刻,daaddressing-prod-ne.azurewebsites.net/给出了一个404错误,我用您的代码片段测试了它:req=http.request(选项,回调)
针对您的服务器,它是daaddressing prod ne.azurewebsites.net/address?postcode=SL6+1PB
,它在IISNode env中的Azure Web应用程序上运行良好。你能提供更多关于你的客户环境的细节吗?好的,我终于发现了问题,这是一个非常愚蠢的问题。。。使用主机字符串“daaddressing prod ne.azurewebsites.net/”在节点下工作正常,但在IIS节点下失败,只需从主机末尾删除“/”,它在两种环境下都能工作,为什么这种情况让我大吃一惊。在纯节点下,尾随斜杠似乎不起作用问题是我的配置,IIS节点配置有尾随斜杠,但在纯节点下我没有,我必须对这些值进行100次比较,但没有找到它。谢谢你的帮助,我很抱歉错过了这么简单的事情