nodejs应用程序无法连接到REST api nodejs应用程序
问题描述:
我有一个nodejs REST api托管在本地主机上,我有一个正在使用它的nodejs应用程序。这个应用程序也在本地主机上运行。一切工作正常,但重新启动后,webapp无法连接到REST api。我正在运行Windows 10.nodejs应用程序无法连接到REST api nodejs应用程序
我测试了邮差和浏览器的REST API,它工作。 REST api没有问题。
尝试更改端口号 - 相同的结果。
我运行wireshark来查看从浏览器请求和从nodejs webapp请求之间的区别。以下是截图。前两行是nodejs应用程序发出请求并且接下来两行来自浏览器。
我无法理解这里出了什么问题。我尝试了一个独立的nodejs脚本,也失败了。以下是我使用的脚本。
var request = require('request');
var u = "xxx";
var p = "xxx";
var auth = "Basic " + new Buffer(u + ":" + p).toString("base64");
var username = "qqqq";
var password = "eeee";
var options = {
url : 'http://localhost:4001/api/v1/transaction',
headers : {
"Authorization" : auth
},
};
console.log(options.url);
request.get(options, function(error,response,body){
//console.log(options);
//console.log(response);
console.log(response.statusCode);
console.log(body);
if (!error && response.statusCode == 200) {
var userObj = JSON.parse(body);
callback(userObj);
} else {
console.log("---- Error ----")
console.log(error);
}
});
答
我发现了这个问题,我发布了答案,希望有人会发现它有用。
我的提示来自wireshark。 (在问题中截图)所有成功的请求都去了[::1]
而不是localhost
或127.0.0.1
。在Windows 10机器重新启动后,REST api nodejs应用程序实际上不再在ip v4 localhost
上投放,而是在ip v6 localhost
上投放。代码绝对没有问题。
而不是使用localhost
消费Web应用程序中的网址,我将其更改为[::1]
,它开始工作。
.....
.....
var options = {
//url : 'http://localhost:4001/api/v1/transaction',
// replaced localhost with [::1]
url : 'http://[::1]:4001/api/v1/transaction',
headers : {
"Authorization" : auth
},
};
.....
.....
检查的头,我假设应用程序正在寻找特定的头文件,如主机和用户代理等。 –
那么,为什么它在重启之前的工作? – unlimit
@unlimit谁知道。我们所能做的就是看症状并做出有根据的猜测。从外观上看,它到达服务器,但服务器在请求的路径上似乎没有资源。 –