Ionic前端和NodeJS服务器之间的连接

时间:2016-12-06 13:56:22

标签: angularjs node.js model-view-controller mobile ionic-framework

过去几天我一直在尝试将使用Ionic Framework制作的Android应用程序与SQL数据库连接起来。经过一些研究后,我明白在我的前端和后端之间我需要一个RESTful API来帮助这两者之间的沟通。因此,当我使用Ionic构建我的应用程序时,我开始使用NodeJS制作服务器。我在MySQL和NodeJS之间建立了连接,这是一个非常简单的hello world脚本,我将在下面输入。

//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模拟器(Android SDK的标准之一)。我也有服务器端和前端在不同的位置,不知道这是一个问题,但我看到每个教程制作一个带有Node和角度的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,cordova框架以及所有这些以及现在我还有机会学习NodeJS超级有用,但这个问题让我很困惑。根据我的理解,当应用程序进入我的路径时,它应该得到一个响应,我保存到datastr然后我将其传递给$scope.server这是一个标签,因此hello world将打印。但没有任何反应。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

你应该用str =“http:// localhost:3000”中的服务器的ip地址替换localhost,它们应该在同一个网络中

答案 1 :(得分:0)

您可以使用ionic serve在浏览器上运行该应用,并检查是否有任何错误消息。似乎是CORS问题。有关Ionic

CORS的更多信息,请查看http://blog.ionic.io/handling-cors-issues-in-ionic/