node-fetch 将帖子正文作为表单数据发送

node-fetch send post body as form-data

提问人:Azima 提问时间:11/11/2020 更新时间:11/19/2022 访问量:19829

问:

我正在尝试使用 body 发送 POST 请求,因为这似乎是唯一有效的方法。form-data

我也在 Postman 中尝试过这个,但发送方式不起作用。bodyraw JSON

所以我尝试做同样的事情,但似乎正在发送,并且我收到与以前相同的错误(从 Postman 使用时)。node-fetchbodyJSONraw

try{
  const { streamId } = request.body;
  const headers = {        
    "Authorization": INO_AUTHORIZATION_CODE,
    // "Content-Type": "multipart/form-data; boundary=<calculated when request is sent>"
    "Content-Type": "application/json"
  }      
  const url = `https://www.inoreader.com/reader/api/0/stream/contents/${streamId}`;
  const body = {
      AppId: INO_APP_ID,
      AppKey: INO_APP_KEY
  }
  
  const resp = await fetch(url, {
      method: 'POST',
      body: JSON.stringify(body),
    //   body: body,
      headers: headers
    });   
    
  const json = await resp.text();
  return response.send(json);
} catch(error) {
    next(error);
}

仅将正文设置为作品:form-data

enter image description here

节点.js 发布 邮递员 节点提取

评论


答:

9赞 salman 11/11/2020 #1

您需要使用他们的文档中提到的 form-data 包,以便您的代码

const FormData = require('form-data');

const form = new FormData();
form.append('AppId', INO_APP_ID);
form.append('AppKey', INO_APP_KEY);

const resp = await fetch(url, {
      method: 'POST',
      body: form
    }); 

评论

0赞 josue.0 7/2/2022
本文档来自 node-fetch 版本 2
0赞 MadaShindeInai 11/16/2022
是的,它仍然适用于无法迁移 ESM 的每个人。但是使用此解决方案,我遇到了套接字挂断错误
3赞 fede coraglio 11/19/2022 #2

乌萨尔:

const form = new URLSearchParams();
form.append('AppId', INO_APP_ID);
form.append('AppKey', INO_APP_KEY);

评论

0赞 Zain Ul Abidin 11/19/2022
一个好的答案总是包括一些解释,以详细说明它如何解决所提出的问题。
0赞 Temuujin Dev 11/26/2022
为什么使用 URLSearchParams 创建表单数据?正如 here(developer.mozilla.org/en-US/docs/Web/API/URLSearchParams) 所说,URLSearchParams 定义了使用 URL 的查询字符串的实用程序方法。它用于使用搜索参数,而不是表单数据。请考虑您的答案。
1赞 LuisAFK 12/31/2022
@TemuujinDev它在他们的文档(另一个答案中的链接)中说要使用,但它从未说过使用该包,因此对于有此问题的其他人来说,这应该是标记为正确的答案URLSearchParamsform-data