2017-06-14 65 views
0

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

但是,当我做了一个连续的post方法,我得到401未经授权的错误消息。有人可以解释我在这里做什么错误。请详细回答,因为我用的角度和cloudant(REST风格的牌坊)新手

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; 

      }); 

回答

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