【问题标题】:json post method formatjson post方法格式
【发布时间】:2020-08-25 14:08:43
【问题描述】:

当我从邮递员发送帖子请求时,我得到了以下格式。

{
   ID:"66",
   Blod:"test",
   Allergic:"no",
   Chronic:"no"
}

但是当我使用 react app post 方法发送 post 请求时,我得到了这种格式。

[Object: null prototype] 
{
 '{
 "ID":"123456789",
 "Blod":"22334445",
 "Allergic":"6677788",
 "Chronic":"3445566"}': ''
}

请帮助我如何获得相同格式的邮递员以正确插入数据。

这是我在 react app uisng axios 模块中的方法:

submithandler=(e)=>{
      e.preventDefault();
     axios.post('http://localhost:8000/api/addsickers',
     JSON.stringify({
         ID:'123456789',
         Blod:'22334445',
         Allergic:'6677788',
         Chronic:'3445566'
        }),

     )
       .then(response=>{
           alert(response);
       })
       .catch(err=>{
           alert("catch"+err);
       });
  }

我在api上使用解析

app.use(bodyparser.json());
// parse application/x-www-form-urlencoded
bodyparser.urlencoded({ extended: false });
// parse the raw data
app.use(bodyparser.raw());
// parse text
app.use(bodyparser.text());

【问题讨论】:

  • 你能提一下你的 node.js 发布方法吗?
  • 它只包含 router.post('/',(req,res)=>{console.log(req.body)}) 我已经评论了其他代码原因,当从 react 应用程序发布时它会插入未定义的值,并且在使用 postaman 时工作正常。
  • 不用stringify,直接用axios发送javascript object/json即可
  • 据我了解..您的邮递员请求工作得很好,并且响应发布请求的行为不同?是这个问题吗?
  • 是的,兄弟。

标签: node.js reactjs api express


【解决方案1】:

请检查邮递员请求配置 设置如下。

如果您现在面临的问题是如何处理传入的响应请求,那么 以下代码 sn-p 将帮助您。

router.post('/', (req, res) => {
    let request = JSON.parse(JSON.stringify(req.body));
    console.log(request.ID);
});

【讨论】:

  • 感谢回复,这是 json { '{"ID":"123456789","Blod":"22334445","Allergic":"6677788","Chronic":"3445566"}': '' } 的输出,console.log(request.ID); 的结果是 undefined
  • @AzizMobarak 这是一个有效的 json 对象,有一个字段,其中{"ID":"123456789","Blod":"22334445","Allergic":"6677788","Chronic":"3445566"} 是一个键,一个空字符串是一个值。
  • 是的,这是真的,我不知道为什么所有的对象都被认为是一个具有空值的键。
【解决方案2】:

你不需要使用 'JSON.stringify' ,像这样:

submithandler=(e)=>{
      e.preventDefault();
     axios.post('http://localhost:8000/api/addsickers',
     {
         ID:'123456789',
         Blod:'22334445',
         Allergic:'6677788',
         Chronic:'3445566'
     },

     )
       .then(response=>{
           alert(response);
       })
       .catch(err=>{
           alert("catch"+err);
       });
  }

【讨论】:

  • 谢谢你的回复,我之前试过了,它启动了catch错误并说“错误:网络错误”
  • @AzizMobarak 但是在 axios 的文档中,他们像在答案中那样做,可能需要调查服务器配置
  • 我用的是本地主机,我也上网试试,看看有没有变化
【解决方案3】:

在您的代码中,您不需要此代码:

// parse the raw data
app.use(bodyparser.raw());
// parse text
app.use(bodyparser.text());

如文档所述:

bodyparser.raw() 返回将所有主体解析为 Buffer 并仅查看 Content-Type 标头与 type 选项匹配的请求的中间件。

bodyParser.text() 返回将所有正文解析为字符串并仅查看 Content-Type 标头与 type 选项匹配的请求的中间件。此解析器支持 gzip 和 deflate 编码的自动膨胀。

您必须从以下位置更改该行:

 bodyparser.urlencoded({ extended: false });

到:

app.use(bodyparser.urlencoded({ extended: false });

【讨论】:

  • 谢谢,我同意,post 方法仍然发送相同的 json 格式,不容易从中读取数据,插入 api 的数据就像 [Object: null prototype] { '{"ID":"123456789","Blod":"22334445","Allergic":"6677788","Chronic":"3445566"}': '',我希望得到使用 {ID:'123456789' ....} 等邮递员时的相同数据,例如第二个很容易通过键入 req.body.ID 返回 ID,但第一种格式将返回 undefined 导致不清楚
  • @AzizMobarak 可能您的数据在服务器端解析错误
  • 我会检查一下,看看结果是否改变
【解决方案4】:

我已经通过使用如下 fetch 方法解决了这个问题:

senddata(event){
      event.preventDefault();
   //if(!this.formvalidation())
    //{
    try{
    fetch('https://localhost:8000/api/addsickers/',{
     method:'post',
     mode:'no-cors',
     headers:{
         'Accept':'application/json',
         'Content-type': 'application/json'
     },
     body:JSON.stringify({
            ID:this.state.code,
             Blod:this.state.blod,
             Allergic:this.state.allergic+" - "+this.state.allergicdescription,
             Chronic:this.state.chronic+" - "+this.state.chronic_description
     })
    });
    alert("data goes")
    }catch(e){
        alert(e)
    }
    //}
}

我在 api 中做了:

let request = JSON.parse(req.body)
console.log(request);

我得到了相同形式的邮递员工具,让我可以正确调用 insert 属性,例如:request.ID 返回正确的值。

谢谢大家的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多