2017-03-31 2 views
0

Dies kann eine dumme Frage sein und ich bin sehr neu in NativeScript. Ich habe ein Beispielprojekt erstellt. Versuchen, eine einfache Anfrage an eine lokale API zu tun. Dies ist ein Website-Setup auf meiner lokalen Dev-Maschine für:Developing Nativescript App mit Local API

http://test-api.dev/api/v1

Ich versuche, einen Endpunkt auf meinem lokalen API zuzugreifen und es scheint nicht, etwas zurück. Aber ich kann den API-Endpunkt in etwas ändern, das keine lokale API ist, und manchmal gibt es etwas zurück.

Die API ist ein Laravel/PHP API und ich kann bestätigen, dass es inFact gültige JSON zurückgibt, so glaube ich nicht, dass die API das Problem ist. Hier ist meine Datei.

var config = require("../../shared/config"); 
var fetchModule = require("fetch"); 
//var http = require("http"); 
var ObservableArray = require("data/observable-array").ObservableArray; 

function GroceryListViewModel(items) { 
    var viewModel = new ObservableArray(items); 
    viewModel.load = function() { 
     // http.getJSON(config.apiUrl + "events").then(function(result) { 
     // console.log(JSON.stringify(result)); 
     // }, function(error) { 
     // console.error(JSON.stringify(error)); 
     // }); 

     return fetch(config.apiUrl + "events", { 
       headers: { 
        //"Authorization": "Bearer " + config.token 
        "Content-Type": "application/json" 
       } 
      }) 
      .then(handleErrors) 
      .then(function(response) { 
       console.log(response); 
       return response.json(); 
      }).then(function(data) { 
       console.dump(data); 
       data.forEach(function(event) { 
        viewModel.push({ 
         name: event.name, 
         id: event.id 
        }); 
       }); 
      }); 
    }; 

    viewModel.empty = function() { 

     while (viewModel.length) { 
      viewModel.pop(); 
     } 
    }; 
    return viewModel; 
} 

function handleErrors(response) { 
    if (!response.ok) { 
     console.log(JSON.stringify(response)); 
     throw Error(response.statusText); 
    } 
    return response; 
} 

module.exports = GroceryListViewModel; 

Bitte gehen Sie einfach auf mich, auf jeden Fall Hilfe suchen. Vielen Dank im Voraus.

Antwort

0

Also ich habe das Problem gefunden, dachte ich würde es posten. Das Problem war nicht meine Endpunkte oder meine NS-Installation. Das liegt daran, dass Android-Emulatoren nicht auf lokale Sites verweisen können, die auf Ihrem Dev-Computer ausgeführt werden, ohne dass die Einstellungen des Hosts auf dem Emulator geändert werden müssen. Dieser Prozess wird hier erklärt, aber ich möchte betonen, dass jeder dasselbe Problem hat.

Android Emulatoren unterstützen keinen Zugriff auf den lokalen Computer Websites aus dem Kasten heraus wie hier erklärt: https://developer.android.com/studio/run/emulator-networking.html

Es Setup durch das Gerät sein muss JEDES MAL es sei denn, jemand hat eine Lösung dieses nur zum Einrichten einmal würde ich gerne sehen, dass es hier geteilt wird.

Es gibt mehrere Lösungen, die ähnliche Schritte skizzieren, aber ich hatte Probleme bei jedem einzelnen. Hier ist eine, die den Kern des Problems skizziert: http://sadhanasiblog.blogspot.in/2012/07/local-environment-setup-for-android.html

Danke für die Hilfe.

0

return fetch(config.apiUrl + "events", { - so erwartet die Abrufanforderung das erste Argument als URL. Also, wo config.apiUrl definiert ist, ist wo die Anfrage geht. Sie können dies so ändern, dass es auf die localhost-Instanz Ihres Servers verweist, den Sie ausführen.

+0

Ja. Es ist richtig eingestellt und zeigt auf den korrekten lokalen API-Endpunkt. Die Daten geben auch ein gültiges JSON-Objekt zurück. Aus irgendeinem Grund wird in diesen Protokollanweisungen nichts angezeigt. Wenn ich es in eine externe API wie die in der Anleitung ändere, funktioniert es gut. – devcflynn

+0

Ich war mir nicht sicher, ob auf meinem Rechner etwas mit Port verbunden ist. Ich betreibe eine LEMP-Umgebung auf einer Unbuntu 16.04-Maschine. – devcflynn

+0

Wenn es Daten zurückgibt, dann sollte alles in Ordnung sein. Können Sie die Ausgabe hinzufügen, die Sie sehen, wenn diese ausgeführt wird? –