【问题标题】:Developing Nativescript app with Local API使用本地 API 开发 Nativescript 应用程序
【发布时间】:2017-03-31 22:57:55
【问题描述】:

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

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;

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

【问题讨论】:

    标签: javascript laravel api local nativescript


    【解决方案1】:

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

    【讨论】:

    • 是的。它设置正确并指向正确的本地 api 端点。数据也返回一个有效的 JSON 对象。出于某种原因,这些日志语句中没有显示任何内容。如果我将其更改为指南中的外部 api,它可以正常工作。
    • 我不确定我的机器上是否有与端口相关的东西。我也在 Unbuntu 16.04 机器上运行 LEMP 环境。
    • 如果它正在返回数据,那么一切都应该没问题。您可以添加运行时看到的输出吗?
    • 我会,但它没有在控制台中使用上述代码输出任何内容。将 URL 更改为不同的内容,例如示例,然后显示内容。将它指向我的本地端点,然后它就不再工作了。如果将其更改为任何本地端点,它们不会返回任何内容。我想我的问题是,这是否支持以这种方式开发 api,或者我做错了什么。也许是配置问题?
    • 首先,您确定您的本地服务器正在运行?其次,它应该返回什么?您可以很好地针对本地服务器进行开发。我的猜测是,如果代码运行并且没有抛出错误,那么您没有返回数据或者您访问了错误的端点
    【解决方案2】:

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

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

    它需要通过设备每次进行设置,除非有人有解决方案只设置一次,我很乐意看到它在这里分享。

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

    感谢您的帮助。

    【讨论】:

    • 你好,你不需要经历这一切。只需点击 10.0.2.2 并点击本地机器
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-13
    • 2019-12-29
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多