2017-06-14 61 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