2017-05-04 121 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 
     }, 
    }; 

..... 
..... 
相關問題