2017-05-04 88 views
0

我有一个nodejs REST api托管在本地主机上,我有一个正在使用它的nodejs应用程序。这个应用程序也在本地主机上运行。一切工作正常,但重新启动后,webapp无法连接到REST api。我正在运行Windows 10.nodejs应用程序无法连接到REST api nodejs应用程序

我测试了邮差和浏览器的REST API,它工作。 REST api没有问题。

尝试更改端口号 - 相同的结果。

我运行wireshark来查看从浏览器请求和从nodejs webapp请求之间的区别。以下是截图。前两行是nodejs应用程序发出请求并且接下来两行来自浏览器。 Wireshark capture

我无法理解这里出了什么问题。我尝试了一个独立的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

那么,为什么它在重启之前的工作? – unlimit

+0

@unlimit谁知道。我们所能做的就是看症状并做出有根据的猜测。从外观上看,它到达服务器,但服务器在请求的路径上似乎没有资源。 –

回答

0

我发现了这个问题,我发布了答案,希望有人会发现它有用。

我的提示来自wireshark。 (在问题中截图)所有成功的请求都去了[::1]而不是localhost127.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 
     }, 
    }; 

..... 
..... 
相关问题