Javascript Google日历API请求未通过Node.js(Express)和#x2B;请求库
我正在编写一个使用谷歌日历API的服务器。我发出了一个成功的请求,但此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
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吗?肯定。我刚查过。