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

a 夏天 提交于 2019-12-10 17:55:27

问题


I have the following OrientDB function:

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

And it returns the following JSON result:

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

What I need to do is to get the values of "pass" and "fail" to use in my web page.

So far I have done this with AngularJS:

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



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

});

Currently it gives the error "401 Unauthorized". How do I authenticate the request?

And if possible, can anyone give some tips on how to get the passCount and failCount from the JSON result returned?


回答1:


The OrientDB HTTP API documentation states that you have to use HTTP Basic authentication for issuing commands. That means you have to include an Authorization header along with your request.

There are a few ways to achieve this, here is a simpler one. Use the configuration object parameter for $http.get to set the header on the request:

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

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

You should definitely move all your database logic to an Angular service, so you can keep this code in one place instead of polluting your controllers.

To make it even cleaner, you could look into $http interceptors and write a request interceptor that adds the header to every HTTP call.


Regarding the JSON question: you can see that the result object contains an array with a single element. Use indexing to get the actual record.

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

If you wrote a service as I mentioned, you could hide this implementation detail from your controller.

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


来源:https://stackoverflow.com/questions/30117149/how-to-authenticate-a-http-request-to-an-orientdb-function-on-angularjs

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!