2013-03-26 108 views
0

我正在編寫一個採用Google Calendar API的服務器。我做了一個成功的請求,但這POST請求is supposed to create a new Calendar返回的HTTP響應身體出現以下錯誤:由谷歌日曆API請求沒有通過Node.js(Express)+請求庫

{ 
"error": { 
    "errors": [ 
    { 
    "domain": "global", 
    "reason": "required", 
    "message": "Required" 
    } 
    ], 
    "code": 400, 
    "message": "Required" 
} 
} 

我如何使用Node.js,Express和節點的HTTP庫的包裝稱爲Request( Mikeal)向Google的API提出請求。我只問這個問題,因爲錯誤信息是相當隱祕的。如果有人能幫助解決這個問題,那會很棒!

一些代碼樣本包含如下,以幫助瞭解更多:

setupTasksCalendar法(使創建一個新的日曆請求):

var setupTasksCalendar = function(req, callback) { 
    Oauth.makeApiCall({ 
     method: 'POST', 
     url: 'https://www.googleapis.com/calendar/v3/calendars', 
     body: JSON.stringify({ 
     summary: "Google Calendar Tasks" 
     }) 
    }, req, function(e, body) { 
     if (e) console.log(e); 
     console.log(body); 
     callback(); 
    }); 
    }; 

makeApiCall方法(包裝方法,使所需的檢查並將身份驗證令牌添加到URL):

this.makeApiCall = function(parameters, req, callback) { 
    if (Date.now() >= req.session.user.token_expiration_time) { 
     self.Auth.updateAccessToken(req, function() { 
     parameters.url = self.addAccessToken(parameters.url, req); 
     request(parameters, function(e, r, body) { 
      if (e) console.log(e); 
      callback(e, body); 
     }); 
     }); 
    } else { 
     parameters.url = self.addAccessToken(parameters.url, req); 
     request(parameters, function(e, r, body) { 
     if (e) console.log(e); 
     callback(e, body); 
     }); 
    } 
    }; 
+0

參觀https://www.googleapis.com/calendar/v3/日曆手動給了我相同的迴應。你是否應該包含你的API密鑰或什麼? – 2013-03-26 22:34:53

+0

我在請求中包含了我的access_token,如果這是你要求的。我知道'makeApiCall'函數可以與其他請求一起工作,因爲我成功地發出了其他請求,並且該函數會自動將access_token添加到URL中;我不認爲這是。 – 2013-03-26 22:37:17

+0

你確定你有正確的網址嗎? – 2013-03-26 22:43:26

回答

1

我想通了!事實證明,僅僅將JSON放入正文中還不夠:我需要確保請求application/jsoncontent-type。要做到這一點的要求,你必須......

替換此:

body: JSON.stringify({ 
    summary: "Google Calendar Tasks" 
    }) 

與此:

json: { 
    summary: "Google Calendar Tasks" 
    }