Cordova app ajax对localhost的调用失败。 :: ERR_CONNECTION_REFUSED

时间:2017-05-20 20:59:31

标签: android node.js ajax cordova express

我在localhost:3000上运行了一个node.js(express)webapp。我现在正在尝试使用cordova开发移动应用程序。

我已经在我的快递应用程序中定义了一条路线:localhost:3000 / tweets'调用时会使用twitter API获取一些推文并将其作为json对象发回。 Everythinngs使用网络应用程序工作非常好,但我很难从移动应用程序进行相同的ajax调用。为了允许来自其他主机的请求,我已将此添加到我的edxpress app.js: 编辑:我现在使用cors中间件:

  app.use(cors());

在我的cordova应用程序中:

元标记:

<meta http-equiv="Content-Security-Policy" content="default-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">

config.xml中

    <?xml version='1.0' encoding='utf-8'?>
<widget id="<id...>" version="1.0.0" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0">
    <name>appname</name>
    <description>
        A twitter search app.
    </description>
    <author email="dev@cordova.apache.org" href="http://cordova.io">
        Apache Cordova Team
    </author>
    <content src="index.html" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <platform name="android">
        <access origin="*" />
        <allow-intent href="market:*" />
    </platform>
    <platform name="ios">
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />
    </platform>
    <engine name="android" spec="^6.2.3" />
    <plugin name="cordova-plugin-camera" spec="^2.4.1" />
    <plugin name="cordova-plugin-whitelist" spec="^1.3.2" />
</widget>

在index.html文件中我链接了“querySender.js”&#39;文件在身体的底部:

    <script type="text/javascript" src="js/querySender.js"></script>

最后,来自querySedner.js&#39;

的内容
$(document).ready(function(){

  $('#btn_send').on('click', function(){
    console.log("app is now sending query!");
    $.ajax({
        type: 'POST',
        url: 'http://127.0.0.1:3000/tweets',
        data: {name:"test_name",lastname:"last_name"},
        dataType:'json',
        success: function(dataR){
          var date = new Date();
          console.log("POST success recorded at: ",date.getTime());
          if (!dataR){
          console.log("No Data received");
          }else{
              console.log("DataR: ",dataR);
          }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown) {
          console.log("Status: " + textStatus+" error:"+ errorThrown);
        },
        timeout:5000
      });

  });
});

使用WebStrom IDE我试图在chrome中运行index.html(它在localhost:63342上运行),请求成功,数据按预期传递。

然而,当我按下按钮时,使用Android模拟器模拟应用程序:

POST http://127.0.0.1:3000/tweets net::ERR_CONNECTION_REFUSED -- jquery-3.2.1.min.js:4

基本上。我在本地运行我的node.js(express)服务器,并希望从android模拟器上的cordova应用程序进行ajax调用。我出了什么问题?

1 个答案:

答案 0 :(得分:7)

好的,经过数小时的研究后,我终于发现localhost或127.0.0.1只是模拟它自己而不是它运行的计算机。要解决此问题,我只需将请求发送到我的计算机(运行node.js服务器)本地IP。在我的情况下,本地IP是192.168.0.2所以我改变了:

http://127.0.0.1:3000/tweets 

为:

http://192.168.0.2:3000/tweets

它似乎现在有效。