0

GoogleCalendarAPIを採用したサーバーを作成しています。成功したリクエストを1つ作成しましたが、新しいカレンダーを作成することになっているPOSTこのリクエストは、HTTP応答本文に次のエラーを返します。

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

私はNode.js、Express、およびRequest(Mikealによる)と呼ばれるNodeのHTTPライブラリのラッパーを使用して、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);
      });
    }
  };
4

1 に答える 1

1

私はそれを考え出した!JSONを本文に入れるだけでは不十分であることがわかりました。リクエストがapplication/jsonとして含まれていることを確認する必要がありましたcontent-type。リクエストでこれを行うには、次のことを行う必要があります...

これを置き換えます:

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

これとともに:

json: {
    summary: "Google Calendar Tasks"
    }
于 2013-03-27T16:39:22.043 に答える