Pure Angular Cloudant连接

时间:2017-06-14 18:31:19

标签: angular cloudant

Iam尝试使用角度连接到我的云端。第一篇文章是成功的,我可以使用第一个get方法从cloudant中检索文档/视图。

但是,当我做一个连续的帖子方法时,我收到401未经授权的错误消息。有人可以解释一下我在这里做的错误。请详细回复,因为我是角度和云量的新手(RESTful arch)

var app = angular.module('myApp', []);
const ACCOUNTNAME = 'my acc';
const APIKEY = 'my key';
const APIPASSWORD = 'my pass';
const DATABASE = 'my db';
var cloudantDoc = 'link of document to update';

app.controller('tutorialCtrl', function($scope, $http) {
//Authentication header settings
var req = {
    method: 'POST',
    url: 'https://'+ACCOUNTNAME+'.cloudant.com/_session',
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded'
    },
    data: 'name='+APIKEY+'&password='+APIPASSWORD,
    withCredentials: true
}

$http(req).then(function(result){
                    //Grab data
                    req = {
                        method: 'GET',
                        url: 'https://'+ACCOUNTNAME+'.cloudant.com/'+DATABASE+'/_design/AllClients/_view/AllClients',
                        withCredentials: true

                    }

                    $http(req).then(function(result){
                                        $scope.tableData = result.data;
                                        console.log(result);
                                    },
                                    function(){
                                        console.log("Failed at grabbing data");
                                    });

                }, 
                function(){
                    console.log('Failed at authenticating');
                }
);

$scope.revisionNumNews;

    $http.post(cloudantDoc, JSON.stringify({"_id": "CLient1", "Client_Name":"ABC", "_rev": ""})).success(function(response){
                revisionNumNews = response.rev;

            });

1 个答案:

答案 0 :(得分:0)

在您的代码中

您有var cloudantDoc = 'link of document to update',如果您尝试更新现有文档,则需要发出PUT请求而不是POST。在任何情况下,您的请求都应包含{withCredentials: true}选项。

如果您尝试创建新文档,请尝试将POST请求更改为以下内容:

var databaseUrl = 'https://' + ACCOUNTNAME + '.cloudant.com/' + DATABASE  

$http.post(databaseUrl, {'_id':'CLient1', 'Client_Name':'ABC'}, {withCredentials: true})
    .then(function(response) {
        $scope.revisionNumNews = response.rev
    })

但是,如果您要更新现有文档,则需要发出PUT请求,并且还要包含文档的最新_rev。它看起来像这样:

var databaseUrl = 'https://' + ACCOUNTNAME + '.cloudant.com/' + DATABASE  

$http.put(databaseUrl + '/' + cloudantDocId, cloudantDoc, {withCredentials: true})
    .then(function(response) {
        $scope.revisionNumNews = response.rev
    })

其中cloudantDocId是文档的文档ID更新,cloudantDoc是更新的文档对象(使用最新的_rev