如何使用isomorphic-fetch使用application / x-www-form-urlencoded标头和URLSearchParams进行POST

时间:2017-04-10 14:30:02

标签: node.js curl fetch-api isomorphic-fetch-api http-status-code-411

这是一个正常的CURL示例:

curl --request POST \
  --url <url> \
  --header 'authorization: Bearer <authorization token>' \
  --header 'content-type: application/x-www-form-urlencoded' \
  --data 'category=1&userId=<uuid>'

我尝试使用isomorphic-fetch重现此请求。

我试过这个:

const searchParams = new URLSearchParams();
searchParams.set('category', category);
searchParams.set('userId', userId);

return fetch(`<url>`, {      
  method: 'POST',
  headers: {
    'Authorization: Bearer <authorization token>',
    'Accept': 'application/json',
    'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8'
  },
  body: searchParams
})`

但我收到411状态代码错误响应(length required

此处有关URLSearchParamsFetch的更多信息:

fetch documentation

fetch spec

有什么建议吗?

1 个答案:

答案 0 :(得分:3)

假设服务器实现是正确的,这里的问题是isomorphic-fetch(或更可能是底层GitHub的WHATWG Fetch polyfill),因为它没有添加Content-Length头,因为它需要固定长度获取标准的主体。

(您还应该能够省略Content-Type标头,因为它也应该从URLSearchParams对象推断出来,并通过API的实现添加。)