2013-03-26 139 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" 
    }