从画布正确获取信息并通过带有 node-fetch 的 webhook 将信息发送到 discord 时出现问题
Posted
技术标签:
【中文标题】从画布正确获取信息并通过带有 node-fetch 的 webhook 将信息发送到 discord 时出现问题【英文标题】:Having a problem properly getting information from canvas and sending information to discord through webhook with node-fetch 【发布时间】:2021-11-22 19:44:48 【问题描述】:所以我正在尝试使用 GET 从画布的 api 发送数据并使用该信息并使用节点获取从同一端点发送 POST 到不和谐。我可以毫无问题地从画布接收数据,并且我控制台日志以确保我必须正确的数据,但我似乎无法获得任何不和谐的信息。我正在使用 discords webhook,但我不知道哪里出错了。
fetch(url + `courses/$course/discussion_topics` ,
method: "GET",
headers :
'Authorization' : 'Bearer <auth token>',
'Content-Type' : 'application/json'
)
.then(res => res.json())
.then(data =>
console.log(data[0].id);
console.log(data[0].title);
console.log(data[0].message);
)
.then(fetch("https://discord.com/api/webhooks/893327519103746149/<webhooktoken>",
method: "post",
headers:
'Accept': 'application/json',
'Content-Type': 'application/json'
,
body: content: 'hello world'
))
.catch(err => console.log(err))
);```
【问题讨论】:
then(fetch(....))
- 这将立即调用fetch
函数。您可能打算写:then(() => fetch(....))
。另一种选择是在第二个then
方法的回调函数中调用fetch
函数。
@Yousaf 我都试过了,但仍然没有任何结果。
@Zboyz,你.then()
第二个fetch()
得到响应数据了吗?
@ikhvjs 是的,我刚刚尝试过,但没有成功。不过,我肯定第二次获取有问题。因为如果我执行 curl 请求,我会收到消息。
@Zboyz,错字??:body: conent: 'hello world'
内容??不满足??向我们展示你的卷发?
【参考方案1】:
如评论中所述,以防万一您有错字或误解。
另外,你需要 JSON.stringyify 你的身体。
请尝试以下示例:
fetch(url + `courses/$course/discussion_topics`,
method: "GET",
headers:
Authorization: "Bearer <auth token>",
"Content-Type": "application/json",
,
)
.then(res => res.json())
.then(data =>
console.log(data[0].id);
console.log(data[0].title);
console.log(data[0].message);
)
.then(() =>
fetch(
"https://discord.com/api/webhooks/893327519103746149/<webhooktoken>",
method: "POST",
headers:
Accept: "application/json",
"Content-Type": "application/json",
,
body: JSON.stringify(
username: "Canvas-Bot",
content: "hello world",
),
)
.then(res => res.json())
.then(data =>
console.log( data );
)
)
.catch(err => console.log(err));
另一种方法是异步/等待。我认为它更清洁。
(async function main()
try
const res1 = await fetch(url + `courses/$course/discussion_topics`,
method: "GET",
headers:
Authorization: "Bearer <auth token>",
"Content-Type": "application/json",
,
);
const data1 = await res1.json();
console.log(data1);
const res2 = await fetch(
"https://discord.com/api/webhooks/893327519103746149/<webhooktoken>",
method: "POST",
headers:
Accept: "application/json",
"Content-Type": "application/json",
,
body: JSON.stringify(
username: "Canvas-Bot",
content: "hello world",
),
);
const data2 = await res2.json();
console.log(data2);
catch (err)
console.log(err);
)();
【讨论】:
.then()
版本中,第二个fetch()
之前是不是少了一个return
?添加return
或清除函数的花括号。
@ikhvjs 是的,它做到了!第一个我无法从我的 .then() 中获取数据,所以我使用了第二种方法,但两者都解决了我没有获取数据的原因。谢谢。
@Roamer-1888,如果要返回第二次获取的结果,可以。我们应该添加一个return
。
@ikhvjs,这不是想要的情况。如果没有return
(或省略大括号),res
将不会传送到.then(res => res.json())
。
@Roamer-1888,感谢您的指出。我没有注意到我犯了一个错误。我更正了。以上是关于从画布正确获取信息并通过带有 node-fetch 的 webhook 将信息发送到 discord 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章
在异步 AWS Lambda 函数中使用带有 node-fetch 模块的 node.js 时遇到问题
使用 Summernote 烧瓶并添加图像 - 获取正确的数据?