2017-02-09 52 views
1

有一次,我只想做一個POST請求我rails服務器上localhost:3000的NodeJS信息發佈到localhost:3000 ECONNREFUSED

運行如果連cUrlpostman一個使用我可以ping我的API

但是叩頭,我的節點程序,我想這樣做:

var req_body = { 
     'my_id': id, 
     'dataTable': data } 


    var options = { 
     method: 'POST', 
     url:  config.get('api_url') + 'end_tracking', 
     json:  true, 
     body:  req_body 
     } 
     // config.get('api_url') return http://localhost:3000/ 

     request(options, function (error, response, body) { 
       console.log(error) 
    ... } 

這就是我得到:

{ Error: connect ECONNREFUSED 127.0.0.1:3000 
at Object.exports._errnoException (util.js:896:11) 
at exports._exceptionWithHostPort (util.js:919:20) 
at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1073:14) 
code: 'ECONNREFUSED', 
errno: 'ECONNREFUSED', 
syscall: 'connect', 
address: '127.0.0.1', 
port: 3000 } 

正如我所說,如果我直接與郵差做這個請求,一切正常!

+0

看起來像運行節點應用程序使用相同的主機和端口作爲Rails應用程序。 – alexmac

+0

我的節點應用程序是在8080 – F4Ke

回答

2

我終於做到了!

對於未知的原因,訪問localhost:3000,與rails s推出沒有我的節點服務器

不惜一切工作,但我工作時,我開始在軌服務器rails s -b 0.0.0.0

+0

這是我花費數小時試圖修復的一個問題的驚人的解決方案,謝謝,但有一個問題,這個策略導致我的Mac OS要求允許ruby接受傳入的網絡連接。這是安全的嗎?這個選項需要考慮哪些安全性問題?並且在'-b'選項的某處是否有文檔?它似乎不在內置的rails幫助菜單中。 – s2t2

0

我是如何做到這一點,只需使用相同的結構,我希望它爲你的作品

request({ 
     url: url, //URL to hit 
     method: 'post', 
     headers: headers, 
     timeout: 10000, 
     body: JSON.stringify(body) 
    }, function (error, result, body) { 
     if (error) { 
      console.log(error); 
     } else if (result.statusCode == 500) { 
      console.log('not found'); 
     } else { 
      console.log('success') 
     } 
    }); 

希望工程。

+0

相同的東西:( ,如果我嘗試單獨獲取本地主機(不包括:3000)它顯示基本'它的作品' 但是,如果我用curl請求我成功,爲什麼不在我的節點應用 – F4Ke

+0

你可以做console.log(error); –