0

我正在编写一个使用 Google Calendar API 的服务器。我已经发出了一个成功的请求,但是这个应该创建一个新日历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. 要在 Request 中执行此操作,您必须...

替换这个:

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

有了这个:

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