2015-05-08 27 views
3

我有以下OrientDB功能:如何验证对AngularJS上的OrientDB函数的HTTP请求?

http://localhost:2480/function/Application/getPassFailCount/9:600 

,并返回以下JSON结果:

{"result":[{"@type":"d","@version":0,"pass":16.0,"fail":2.0,"@fieldTypes":"pass=d,fail=d"}]} 

我需要做的是得到"pass""fail"值在我的网站使用页。

到目前为止,我已经与AngularJS做到了这一点:

$http.get('http://localhost:2480/function/Application/getPassFailCount/9:600'). 
success(function(data) { 
    $scope.data = data.result; 



// $scope.passCount = ; 
// $scope.failCount = ; 

}); 

目前,它给出了错误 “401未授权”。我如何验证请求?

如果可能的话,任何人都可以提供一些关于如何从返回的JSON结果中获取passCount和的提示吗?

回答

4

OrientDB HTTP API documentation指出您必须使用HTTP基本身份验证来发出命令。这意味着你必须包括一个Authorization标题和你的请求。

有几种方法可以做到这一点,这里是一个更简单的方法。使用配置对象参数$http.get设置页眉上的要求:

function base64(str) { 
    return btoa(unescape(encodeURIComponent(str))); 
} 

$http.get('http://...', { 
    headers: { 'Authorization': 'Basic ' + base64(user + ':' + password) } 
}).success(...); 

你绝对应该将您的所有数据库逻辑的角度服务,让您可以在一个地方,而不是污染你的控制器保持此代码。

为了使它更干净,您可以查看$http interceptors并编写一个请求拦截器,该请求拦截器将每个 HTTP调用的标头添加到


关于JSON问题:你可以看到结果对象包含一个单个元素的数组。使用索引获取实际记录。

var result = data.result[0]; 
$scope.passCount = result.pass; 
$scope.failCount = result.fail; 

如果您按照我所述编写了服务,您可以从控制器中隐藏此实现细节。

function getCount() { 
    return $http.get(...).then(function (data) { 
     var result = data.result[0]; 

     // the caller will only see this simpler object 
     return { pass: result.pass, fail: result.fail }; 
    }); 
} 
+0

哇!你是一个救星!谢谢加载! – Dishon