使用Local API开发Nativescript应用程序

时间:2017-03-31 22:57:56

标签: javascript laravel api local nativescript

这可能是一个愚蠢的问题,我对NativeScript很新。我有一个示例项目。尝试向本地 api执行简单的get请求。这是我本地开发机器上的网站设置:

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

我正在尝试访问本地API上的端点,但它似乎没有返回任何内容。但我可以将API端点更改为不是本地API的东西,有时它会返回内容。

API是一个Laravel / PHP api,我可以确认它实际上是返回有效的json,所以我不认为API是问题所在。这是我的档案。

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;

请放轻松,但我肯定会寻求帮助。提前谢谢大家。

2 个答案:

答案 0 :(得分:0)

return fetch(config.apiUrl + "events", { - 因此获取请求期望第一个参数是URL。因此,定义config.apiUrl的位置是请求的位置。您可以将其更改为指向正在运行的服务器的localhost实例。

答案 1 :(得分:0)

所以我发现了这个问题,以为我会发布它。问题不在于我的端点或我的NS安装。这是因为开箱即用的Android Emulators无法引用您的开发机器上运行的本地站点,而无需对模拟器上的主机设置进行一些修改。这个过程在这里解释,但我想强调任何有同样问题的人。

Android模拟器不支持开箱即用的本地计算机网站访问,如下所述:https://developer.android.com/studio/run/emulator-networking.html

需要通过设备 EVERYTIME 进行设置,除非有人有解决方案只设置一次,我很乐意在此处分享。

有几个解决方案概述了类似的步骤,但我每个问题都有问题。以下是概述问题要点的内容: http://sadhanasiblog.blogspot.in/2012/07/local-environment-setup-for-android.html

感谢您的帮助。