如何在 AngularJS 上验证对 OrientDB 函数的 HTTP 请求?

How to authenticate a HTTP request to an OrientDB function on AngularJS?

我有以下 OrientDB 函数:

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

它 returns 以下 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 Unauthorized”。如何验证请求?

如果可能的话,谁能提供一些关于如何从返回的 JSON 结果中获取 passCountfailCount 的提示?

OrientDB HTTP API documentation 声明您必须使用 HTTP 基本身份验证来发出命令。这意味着您必须在请求中包含 Authorization header。

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

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

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

您绝对应该将所有数据库逻辑移至 Angular 服务,这样您就可以将此代码保存在一个地方而不是污染您的控制器。

为了让它更清晰,您可以查看 $http interceptors 并编写一个请求拦截器,将 header 添加到 每个 HTTP 调用。


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

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 };
    });
}