从画布正确获取信息并通过带有 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(() =&gt; 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 =&gt; res.json()) @Roamer-1888,感谢您的指出。我没有注意到我犯了一个错误。我更正了。

以上是关于从画布正确获取信息并通过带有 node-fetch 的 webhook 将信息发送到 discord 时出现问题的主要内容,如果未能解决你的问题,请参考以下文章

在异步 AWS Lambda 函数中使用带有 node-fetch 模块的 node.js 时遇到问题

使用 node-fetch 从 api 嵌入 DnD 咒语

使用 Summernote 烧瓶并添加图像 - 获取正确的数据?

node-fetch 从 html 网站获取 id 但我收到错误 200 undefined

使用 node-fetch 计算下载百分比的正确方法

从预览窗口中获取图像或画布