我正在尝试使用GoToMeeting的API并发出POST请求来创建会议。目前,我只是试图硬编码会议的主体并发送标题,但我收到了,我是无效的JSON错误,不知道为什么。这是该路线的代码:
app.post('/new-meeting', (req, res) => {
const headers = {
'Content-Type': 'application/json',
Accept: 'application / json',
Authorization: 'OAuth oauth_token=' + originalToken
};
console.log('-----------------------------------------------------------')
console.log('Acess Token:');
console.log('OAuth oauth_token=' + originalToken);
console.log('-----------------------------------------------------------')
const meetingBody = {
subject: 'string',
starttime: '2018-03-20T08:15:30-05:00',
endtime: '2018-03-20T09:15:30-05:00',
passwordrequired: true,
conferencecallinfo: 'string',
timezonekey: 'string',
meetingtype: 'immediate'
};
return fetch('https://api.getgo.com/G2M/rest/meetings', {
method: 'POST',
body: meetingBody,
headers: headers
}).then(response => {
console.log('response:');
console.log(response);
response
.json()
.then(json => {
res.send(json);
console.log(req.headers);
})
.catch(err => {
console.log(err);
});
});
});
当我点击该路由器时,出现以下错误:
{
"error": {
"resource": "/rest/meetings",
"message": "invalid json"
}
}
任何建议都将不胜感激!
答案 0 :(得分:2)
您正在传递fetch
JavaScript对象所代表的body
的值。它通过(隐式)调用其.toString()
方法将其转换为字符串。这不会给你JSON。您正在调用的API会抱怨并告诉您它不是JSON。
您需要使用以下命令将对象转换为JSON:
body: JSON.stringify(meetingBody),
这证明了问题和解决方案。
这是GoToMeeting API的一个非常原始和不完整的模拟。它只是回应了请求机构。
const express = require("express");
var app = express();
var bodyParser = require('body-parser');
app.use(bodyParser.text({ type: "*/*" }));
app.post("/", (req, res) => {
console.log(req.body);
res.send(req.body)
});
app.listen(7070, () => console.log('Example app listening on port 7070!'))
这表示您的代码,但Express服务器已被删除。只保留与向GoToMeeting API发送请求相关的代码。
const url = "http://localhost:7070/";
const fetch = require("node-fetch");
const headers = {
'Content-Type': 'application/json',
Accept: 'application / json',
Authorization: 'OAuth oauth_token=foobarbaz'
};
const meetingBody = {
subject: 'string',
starttime: '2018-03-20T08:15:30-05:00',
endtime: '2018-03-20T09:15:30-05:00',
passwordrequired: true,
conferencecallinfo: 'string',
timezonekey: 'string',
meetingtype: 'immediate'
};
fetch(url, {
method: 'POST',
body: meetingBody,
headers: headers
})
.then(res => res.text())
.then(body => console.log(body));
服务器和客户端的日志显示:
[object Object]
这是您致电meetingBody.toString()
时获得的。
如果按照本答案顶部的描述更改代码,则会得到:
{"subject":"string","starttime":"2018-03-20T08:15:30-05:00","endtime":"2018-03-20T09:15:30-05:00","passwordrequired":true,"conferencecallinfo":"string","timezonekey":"string","meetingtype":"immediate"}
这是JSON,这是API所期望的。
MIME类型中没有空格。 Accept: 'application / json',
应为Accept: 'application/json',
。这个可能不会给你带来任何问题。
答案 1 :(得分:0)
我认为标题不正确。
你需要'Accept:application / json'没有空格。