0

Я пытаюсь в течение последних двух дней подключить приложение Android с 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"); 

Но я не могу получить ответ от сервера, когда я нахожусь в своем приложении. Я использовал Ajax Angular, чтобы получить ответ и просто показать свой ответ на строку, но ничего не происходит. По какой-то причине я не могу получить ответ с сервера. Чтобы прояснить некоторые вещи, мой сервер MySQL размещен на Azure, но я запускаю (пока) мой сервер NodeJS на localhost. Я запускаю интерфейс с эмулятором Android (стандартный для Android SDK). У меня также есть серверная часть и интерфейс в разных местах, но не уверен, что это проблема, но каждый урок, который я видел в создании веб-приложения с узлом и угловым, имеет их на одном рабочем месте, у меня их есть отдельно, потому что он должен быть мобильным приложением. Вот мой контроллер.

.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 будет печатать. Но ничего не происходит.

Любые идеи?

+0

Вы можете запустить приложение в браузере с помощью '' ионной службы'' и проверить наличие сообщения об ошибке. Похоже на вопрос '' CORS''. проверьте http://blog.ionic.io/handling-cors-issues-in-ionic/ – raj

+0

Я не запускал его из браузера, чтобы избежать CORS в первую очередь, но старайтесь как можно скорее :) – NickCh

+0

Так что, видимо, когда я редактировал 'ionic.project', который теперь переименован в' ionic.config.json' для всех, кто мог бы знать в будущем, с прокси-сервером у меня была ошибка. Комментарий в предоставленной вами ссылке предложил расширение chrome 'Allow-Control-Allow-Origin', которое фактически позволило мне увидеть, что соединение действительно происходит. Я обнаружил это сначала: console.log (res.send («hello world»)), который был фактически json, поэтому я сделал его строковым, и теперь он показывает мне «Object Object» 'в журнале всякий раз я перехожу на мой localhost: 3000 или всякий раз, когда я нажимаю submit в приложении. – NickCh

ответ

0

Вы можете запустить приложение в браузере с ionic serve и проверьте наличие сообщений об ошибках. Похоже на вопрос CORS. Зайдите на страницу http://blog.ionic.io/handling-cors-issues-in-ionic/ для получения дополнительной информации о CORS в Ионном

0

вы должны заменить локального хоста с IP-адрес вашего сервера в ул = «HTTP: // локальный: 3000», и они должны находиться в одной и той же сети

+0

Сервер NodeJS работает на localhost/127.0.0.1 в порту 3000, в эмуляторе он не запускается на сервере.запустив его через браузер и включив CORS, я достиг соединения (как вы сказали, они находятся на одном сервере сейчас), хотя теперь кажется, что единственная причина, по которой я не могу продвинуться, - это мое понимание всей возможности подключения, ответов и запросов. Но я все выясню :) Хотя это довольно странно, почему мобильное приложение должно быть на одном сервере? Не следует ли приложению просто получать данные с пути только с помощью интернет-соединения? – NickCh

Смежные вопросы