使用本地API开发Nativescript应用程序

问题描述:

这可能是一个愚蠢的问题,我对NativeScript非常陌生。我有一个示例项目。试图做一个简单的获取请求到本地 api。这是我的本地开发机器上的网站设置为:使用本地API开发Nativescript应用程序

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; 

请容易对我,绝对寻求帮助虽然。谢谢大家。

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

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

它需要通过设备每次要设置除非有人有一个解决方案,只此设置有一次,我希望看到它在这里分享。

有许多解决方案概述了类似的步骤,但我遇到过每一个问题。这里是一个概述问题的要点: http://sadhanasiblog.blogspot.in/2012/07/local-environment-setup-for-android.html

感谢您的帮助。

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

+0

是的。它被正确设置,并指向正确的本地API端点。数据也会返回有效的JSON对象。出于某种原因,这些日志语句中没有任何显示。如果我将其更改为外部API,如指南中的那样,它可以正常工作。 – devcflynn

+0

我不确定在我的机器上是否有端口相关的东西。我在Unbuntu 16.04机器上运行LEMP env。 – devcflynn

+0

如果它正在返回数据,那么一切都应该没问题。你可以添加你运行时看到的输出吗? –