Я пытаюсь в течение последних двух дней подключить приложение 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
будет печатать. Но ничего не происходит.
Любые идеи?
Вы можете запустить приложение в браузере с помощью '' ионной службы'' и проверить наличие сообщения об ошибке. Похоже на вопрос '' CORS''. проверьте http://blog.ionic.io/handling-cors-issues-in-ionic/ – raj
Я не запускал его из браузера, чтобы избежать CORS в первую очередь, но старайтесь как можно скорее :) – NickCh
Так что, видимо, когда я редактировал 'ionic.project', который теперь переименован в' ionic.config.json' для всех, кто мог бы знать в будущем, с прокси-сервером у меня была ошибка. Комментарий в предоставленной вами ссылке предложил расширение chrome 'Allow-Control-Allow-Origin', которое фактически позволило мне увидеть, что соединение действительно происходит. Я обнаружил это сначала: console.log (res.send («hello world»)), который был фактически json, поэтому я сделал его строковым, и теперь он показывает мне «Object Object» 'в журнале всякий раз я перехожу на мой localhost: 3000 или всякий раз, когда я нажимаю submit в приложении. – NickCh