通过fetch()向后端API发送POST请求时,主体只有键,没有值

时间:2018-12-24 19:47:22

标签: javascript node.js reactjs fetch

当我向后端Express服务器发送POST请求时,req.body仅包含密钥部分,其中整个主体是密钥,而值部分为空

这是前端获取请求

let data = {
  videoUrl: "dummy text"
}
fetch("/api/getinfo", {
  method:"POST",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8"
  },
  body: JSON.stringify(data)
})

这是我在后端处理的方式(注意:我正在使用body-parser

app.post("/api/getinfo", (req,res) => {
    console.log(req.body);
}

我希望输出为

'{ "videoUrl":"dummy text" }'

但是我得到的是

{ '{"videoUrl":"dummy text"}': '' }

整个请求正文是键,值是空的。

我在做什么错了?

3 个答案:

答案 0 :(得分:3)

您使用了错误的Content-Type发送json

尝试

"Content-Type": "application/json;charset=UTF-8"

答案 1 :(得分:1)

我注意到您的标头中存在问题;

fetch("/api/getinfo", {
  method:"POST",
  headers: {
    "Content-Type": "application/x-www-form-urlencoded;charset=UTF-8" //this very line
  },

我猜你的意思是

fetch("/api/getinfo", {
  method:"POST",
  headers: {
    'Content-type': 'application/json; charset=utf-8'
  },

注意:您的标头表示内容的编码内容。不一定可以从内容本身推断出内容的类型,即,您不一定只看内容并知道该怎么办。因此,您需要确定标题中写的是什么,否则最终将出现错误。

我建议您阅读有关What does “Content-type: application/json; charset=utf-8” really mean?

的更多信息

答案 2 :(得分:0)

问题在于您要对数据进行字符串化处理

body: JSON.stringify(data)

应该是

body: data

那应该解决