如何对AngularJS上的OrientDB函数的HTTP请求进行身份验证?

如何对AngularJS上的OrientDB函数的HTTP请求进行身份验证?,angularjs,httprequest,orientdb,Angularjs,Httprequest,Orientdb,我有以下OrientDB功能: 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完成了这项工

我有以下OrientDB功能:

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
failCount
。这意味着您必须在请求中包含
授权
标题

有几种方法可以实现这一点,这里有一种更简单的方法。使用
$http.get
的配置对象参数设置请求的标题:

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

$http.get('http://...', {
    headers: { 'Authorization': 'Basic ' + base64(user + ':' + password) }
}).success(...);
您肯定应该将所有数据库逻辑移动到Angular服务,这样您就可以将这些代码保存在一个地方,而不会污染控制器

为了使它更干净,您可以研究并编写一个请求拦截器,将头添加到每个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 };
    });
}

哇!你是救命恩人!谢谢你!