我在localhost上托管了一个nodejs REST api,我有一个使用它的nodejs应用程序。这个应用程序也在localhost上运行。一切正常,但重启后,webapp再也无法连接到REST api了。我正在运行Windows 10。
我用邮递员和浏览器测试了REST API,但它确实有效。 REST api没有问题。
尝试更改端口号 - 结果相同。
我运行wireshark来查看从浏览器请求和nodejs webapp之间的区别。以下是截图。前两行是nodejs app发出请求而后两行来自浏览器。
我无法理解这里有什么问题。我尝试使用独立的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);
}
});
答案 0 :(得分:0)
我发现了问题并且我发布了答案,希望有人能发现它有用。
我的提示来自wireshark。 (问题中的屏幕截图)所有成功的请求都转到[::1]
而不是localhost
或127.0.0.1
。重新启动Windows 10计算机后,REST api nodejs应用程序实际上不再在ip v4 localhost
上提供,而是在ip v6 localhost
上提供服务。代码完全没有问题。
我没有在使用网络应用中的网址中使用localhost
,而是将其更改为[::1]
,然后就开始工作了。
.....
.....
var options = {
//url : 'http://localhost:4001/api/v1/transaction',
// replaced localhost with [::1]
url : 'http://[::1]:4001/api/v1/transaction',
headers : {
"Authorization" : auth
},
};
.....
.....