在AngularJS中,这个$ resource Web服务连接配置到底意味着什么?

时间:2015-11-18 10:37:18

标签: javascript json angularjs javascript-framework angularjs-resource

我在AngularJS中绝对是新手,我正在研究一个教程,展示如何访问此外部天气预报API:http://openweathermap.org/forecast以检索和使用天气信息。

所以,在我的应用程序中,我有一个这样的控制器:

weatherApp.controller('forecastController', ['$scope', '$resource', '$routeParams', 'cityService', function($scope, $resource, $routeParams, cityService) {
    // It contain the city selected in the view:
    $scope.city = cityService.city;

    $scope.days = $routeParams.days || 2;

    $scope.weatherAPI = $resource("http://api.openweathermap.org/data/2.5/forecast/daily", 
                                  { APPID: 'MY_PERSONAL_KEY',
                                   callback: "JSON_CALLBACK",
                                   cnt: 5
                                  }, 


                                  { get: { method: "JSONP" }});

    $scope.weatherResult = $scope.weatherAPI.get({ q: $scope.city, cnt: $scope.days });

    $scope.convertToFahrenheit = function(degK) {

        return Math.round((1.8 * (degK - 273)) + 32);

    }

    $scope.convertToDate = function(dt) { 

        return new Date(dt * 1000);

    };

}]);

我发现一些困难,以了解服务的确切调用方式以及需要的信息。

所以从我的理解(但我绝对不确定它如此纠正我,如果我做错了断言)我有以下情况:

1)在控制器中,我注入了Angular提供的 $ resource 服务,据我所知,这是一个可用于友好的RESTful Web服务交互的对象。

所以通过这一行:

$scope.city = cityService.city;

我将一个城市(由用户在视图中插入)放入此控制器的 $ scope city 属性中,它将是用户之一用于webservice查询的参数。

然后我在 $ scope 对象上创建 weatherAPI 属性,我认为该属性应代表访问此资源的方式

    $scope.weatherAPI = $resource("http://api.openweathermap.org/data/2.5/forecast/daily", 
                                  { APPID: 'MY_PERSONAL_KEY',
                                   callback: "JSON_CALLBACK"
                                  }, 


                                  { get: { method: "JSONP" }});

所以我认为 weatherAPI 是由 $ resource 服务创建的资源对象(或者我错过了什么?)。

在此我设置了Web服务URL(http://api.openweathermap.org/data/2.5/forecast/daily)和几个JSON对象,这些:

{ 
    APPID: 'MY_PERSONAL_KEY',
    callback: "JSON_CALLBACK"
}, 

我在其中声明了 APPID 字段,这是我的个人密钥以使用密钥和回调:“JSON_CALLBACK”字段。究竟是什么代表了回调字段?

第二个目标:

{get:{method:“JSONP”}}

好的,对我来说,这两个对象的争论非常模糊。

究竟是什么定义的?在我看来,这是与我的应用程序的安全性有关的东西,但我绝对不确定它

最终,它通过以下方式从Web服务检索数据:

$scope.weatherResult = $scope.weatherAPI.get({ q: $scope.city, cnt: $scope.days });

我认为我只是传递了2个参数(类似于?q = value&?cnt =经典HTTPrequest的值)

1 个答案:

答案 0 :(得分:0)

  

所以我认为weatherAPI是由$ resource服务创建的资源对象(或者我错过了什么?)。

不,你没有遗漏任何东西。 weatherAPI正如您认为的那样。

  

其中我声明APPID字段是我的个人密钥以使用密钥和回调:“JSON_CALLBACK”字段。究竟代表这个回调字段的是什么?

callback字段只是每个请求传递给API的默认GET参数。它在此处设置,因此您不必在每次从API请求内容时都将其传递。

  

究竟是什么定义的?在我看来,这是与我的应用程序的安全性有关的东西,但我绝对不确定它

传递给$resource调用的第三个参数是API上可用方法的定义。

在外部对象中,键是方法的名称。它只是该方法可用的名称。 value是该方法的设置对象,在这种情况下,它只指定方法的类型,即“JSONP”。

JSONP是一种特殊类型的请求,它只能是一个“GET”请求,浏览器不允许在这里“POST”。 JSONP必须返回简单的函数调用,将一个参数传递给它,JSON带有结果数据。此函数将在您的JavaScript上调用。

JSONP只是进行跨站点调用的一种解决方法。