Javascript Google日历API请求未通过Node.js(Express)和#x2B;请求库

Javascript Google日历API请求未通过Node.js(Express)和#x2B;请求库,javascript,node.js,express,google-api,google-calendar-api,Javascript,Node.js,Express,Google Api,Google Calendar Api,我正在编写一个使用谷歌日历API的服务器。我发出了一个成功的请求,但此POST请求在HTTP响应正文中返回以下错误: { "error": { "errors": [ { "domain": "global", "reason": "required", "message": "Required" } ], "code": 400, "message": "Required" } } 我使用Node.js、Express和Node的HTT

我正在编写一个使用谷歌日历API的服务器。我发出了一个成功的请求,但此
POST
请求在HTTP响应正文中返回以下错误:

{
 "error": {
  "errors": [
   {
    "domain": "global",
    "reason": "required",
    "message": "Required"
   }
  ],
  "code": 400,
  "message": "Required"
 }
}
我使用Node.js、Express和Node的HTTP库的包装器(由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();
    });
  };
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);
      });
    }
  };
makeApiCall方法(一种进行必要检查并将身份验证令牌添加到URL的包装器方法):

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();
    });
  };
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);
      });
    }
  };

我知道了!结果证明,仅仅将JSON放在正文中是不够的:我需要确保请求具有
application/JSON
作为
内容类型。要在请求中执行此操作,您必须

替换此项:

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

json: {
    summary: "Google Calendar Tasks"
    }

手动访问给了我同样的回答。你应该包括你的API密钥还是什么?我在请求中包括了我的访问令牌,如果你是这样要求的话。我知道
makeApiCall
函数可以处理其他请求,因为我已经成功地发出了这些请求,该函数会自动将访问令牌添加到URL中;我不这么认为。你确定你有正确的url吗?肯定。我刚查过。