fetch() POST 请求,数据成为对象键 [重复]

Posted

技术标签:

【中文标题】fetch() POST 请求,数据成为对象键 [重复]【英文标题】:fetch() POST Request, data becomes object key [duplicate] 【发布时间】:2019-01-21 20:35:57 【问题描述】:

是否有人在发送 POST 获取请求时遇到问题,其中 JSON 字符串成为接收端的对象键,特别是使用 "Content-Type": "application/x-www-form-urlencoded" 作为标头。

我还尝试使用 CircularJSON 来尝试修复 stringify 可能创建的任何循环引用,因为 NodeJS 在收到 JSON 时会吐出类型错误。

客户端代码:

/* Triggered on a button click */
triggerTransfer(product) 

    let headers = 
        body: CircularJSON.stringify(product),
        headers:  "Content-Type": "application/x-www-form-urlencoded" ,
        method: "POST"
    

    this.setState(
        transferState: 
    /* State changes*/
        
    )

    fetch( _API + '/products/transfer', headers)
        .then(res => 
            return res.json()
        )
        .then((res) => 
            console.log(res)
            this.setState(
                transferState: 
        /* State changes*/
                
            )
        )
        .catch(err => this.setState( error: err ))

服务器端路由(请注意,我也在使用 body-parser),我知道这条路由没有任何作用,但这只是为了帮助调试问题:

router.post('/transfer', async (req,res,next)=>
  console.log(req.body);
  res.json(req.body);
)

从客户端发送时,JSON 字符串如下所示:


  "id": 1127,
  "identifier": "CABLE-RJ45-NETWORK-TESTER",
  "description": "CABLE-RJ45-NETWORK-TESTER",
  "price": 50,
  "cost": 35,
  "vendor": 
    "id": 104,
    "identifier": "",
    "name": "",
    "_info": 
      "company_href": ""
    
  ,
  "_info": 
    "lastUpdated": "2012-08-30T05:37:13Z",
    "updatedBy": ""
  

在服务端收到时,对象如下所示:


  '"id":1127,"identifier":"CABLE-RJ45-NETWORK-TESTER","description":"CABLE-RJ45-NETWORK-TESTER","price":50,"cost":35,"vendor":"id":104,"identifier":"","name":"","_info":"company_href":"","_info":"lastUpdated":"","updatedBy":""': ''

请注意,从客户端发送的 JSON 字符串现在是对象键 :(

任何帮助都会很棒

【问题讨论】:

您将正文设置为字符串,并且将内容类型设置为编码形式,这没有任何意义。您要发送键/值对还是 JSON? 我只需要在服务器端访问该对象,您会推荐哪种方法以及实现此目的的方法? 我会将它作为 JSON 发送,并通过为 application/json 设置正确的 HTTP 标头来读取正文作为字符串。见***.com/questions/29775797/fetch-post-json-data 【参考方案1】:

一切都好,通过更改标头并远离编码解决了这个问题:

    let headers = 
        body: CircularJSON.stringify(product),
        headers:  "Content-Type": "application/json" ,
        method: "POST"
    

【讨论】:

以上是关于fetch() POST 请求,数据成为对象键 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

fetch网络请求 get 和 post

使用 fetch 进行 POST 请求以将数据添加到 JSON 服务器数据库

POST请求 之 对数据进行编码处理

将 jquery ajax POST 请求更改为 fetch api POST

React fetch post 请求中的空属性和值

使用 fetch() 的 POST 请求返回 204 无内容