0

Ionic Frameworkで作ったアンドロイドアプリとSQLデータベースを接続するために、ここ数日間試してきました。いくつかの研究の後、フロントエンドとバックエンドの間で、私はRESTful APIが必要であることを理解しました。だから私はIonicで自分のアプリを構築していたので、私はNodeJSでサーバーを作り始めました。私はMySQLとNodeJSとの間の接続を行いました。ちょうど私が下に入力する非常に単純なhello worldスクリプトです。Ionic FrontendとNodeJSサーバ間の接続

//Setup 
var db = require('./db'); 
var express = require('express'); 
var app = express(); 



app.use(function (req, res, next) { 
    res.header('Access-Control-Allow-Credentials', true); 
    res.header('Access-Control-Allow-Origin', req.headers.origin); 
    res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE'); 
    res.header(
    'Access-Control-Allow-Headers', 
    'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept' 
); 
    if ('OPTIONS' === req.method) { 
    res.status(200).end(); 
    } else { 
    next(); 
    } 
}); 



//Config 
function handle_database(req, res) { 

    db.connect(db.MODE_PRODUCTION, function (err) { //connect to database 
    if (err) throw err; 
    console.log("Connected"); 
    }) 


    res.send("hello world"); 
// db.select('*', 'enikio1.customer', 'FirstName = "Nick"', res); 

} 


app.get("/", function (req, res) { 
    handle_database(req, res); 
}); 

//Listen,Hey 
app.listen(3000); 
console.log("App listening on port 3000"); 

私のアプリでは、私はサーバーからの応答を得ることができません。 AngularのAjaxを使用してレスポンスを取得し、ストリングに対するレスポンスを表示しましたが、何も起こりません。何らかの理由で私はサーバーからの応答を得ることができません。いくつかのことを明確にするために、私のMySQLサーバはAzureでホストされていますが、私はlocalhost上のNodeJSサーバを(今のところは)実行しています。私はアンドロイドエミュレータ(Android SDKの標準のもの)にフロントエンドを実行します。私はまた別の場所にサーバー側とフロントエンドを持っていますが、それは問題ですが、すべてのチュートリアルでは、ノードと角度を使ってWebアプリケーションを作成しているのを見て、同じ職場でそれらを持っています。モバイルアプリになるここに私のコントローラがあります。

.controller('AccountCtrl', function ($scope, $state,$http,$ionicPopup, $rootScope) { 

    $scope.signin = function() //signin is in the submit button 
    { 
     console.log("Some") 
      str="http://localhost:3000"; 
      data = {}; 
      datastr = ""; 
      $http.get(str) 
      .success(function (response){ 
       // data = response[0].Email; 
       // $scope.data.email = data;  

       datastr = response; 
       $scope.server = datastr; //server is a label 

      }) 
    } 
    }); 

今、私ははっきりとウェブ/アプリの開発には本当に新しいですし、何が起こっているのか分からない、私は本当にAngularJS、コルドバのフレームワークとすべてのことを学び始めるたかっプラス今、私はまたの機会を持っています非常に便利なNodeJSを学んでください。しかし、この問題は私には本当に混乱しています。アプリケーションが私のパスに行くときに理解したことに基づいて、私はdatastrに保存した応答を取得し、次に$scope.serverというラベルに渡しますので、hello worldが印刷されます。しかし、何も起こりません。

アイデア?

+0

ブラウザで「ionic serve」を実行してエラーメッセージがないか確認してください。 '' CORS''のように思えます。 http://blog.ionic.io/handling-cors-issues-in-ionic/ – raj

+0

私は最初にCORSを避ける​​ためにブラウザから実行していませんでしたが、できるだけ早く試してみてください:) – NickCh

+0

だから、明らかに私は 'ionic.project'を編集しました。これは将来的に知りたい人のために' ionic.config.json'に改名されました。あなたが提供したリンクのコメントは、クロム拡張子 'Allow-Control-Allow-Origin'を提案しました。実際に接続が実際に起こっているのを実際に見ることができました。私は最初に、 'console.log(res.send(" hello world "));'これは実際にjsonだったので、これを文字列にして、今度は 'Object Object '私は私のlocalhostに行く:3000または私がアプリで提出をクリックするたびに。 – NickCh

答えて

0

であるべきで、エラーメッセージがないか確認してください。 CORS号のようですの詳細はCORS in Ionic

0

あなたはstr内のサーバーのIPアドレス=「のhttp:// localhostを:3000」ではlocalhostを置き換える必要がありますが、ionic serveでブラウザ上でアプリケーションを実行することができ、それらは、同じネットワーク内

+0

NodeJSサーバーは、ポート3000のlocalhost/127.0.0.1上で実行されますが、エミュレーターではサーバー上で実行されません。ブラウザで実行してCORSを有効にすると、接続が完了しました(今度は同じサーバー上にあると言いました)が、今や私が進めることができない唯一の理由は接続、応答、要求全体を理解しているように見えるからです。しかし、私はそれを理解します:)それは一見厄介ですが、なぜモバイルアプリは同じサーバー内にある必要がありますか?アプリケーションはちょうどインターネット接続でパスからデータを取ることができないはずですか? – NickCh

関連する問題