理解 React 中的 Post 请求响应

Posted

技术标签:

【中文标题】理解 React 中的 Post 请求响应【英文标题】:Understanding Post request responses in React 【发布时间】:2021-11-15 01:26:53 【问题描述】:

在我的 React 应用程序中,我向我创建的 ASP.Net Core Web API 发出了一个发布请求:

fetch('https://localhost:44326/api/Players/post', 
      method: 'POST',
      headers: 
        Accept: 'application/json',
        'Content-Type': 'application/json',
      ,
      body: JSON.stringify(
        handle: data.handle,
        role: data.role,
        avatar: linkToAvatar,
      ),
    ).then((response) => console.log(response.body));

这个 post 方法成功执行,新记录被添加到数据库中。但是,我需要刚刚创建的玩家记录的 ID。

如果我在 Postman 中向这个地址发出这个帖子请求:https://localhost:44326/api/Players/post with body


  "handle": "Cole",
  "role": "Fixer",
  "avatar": "null"

它发回这个响应正文


    "id": 58,
    "handle": "Cole",
    "role": "Fixer",
    "avatar": "null",
    "specialAbilities": null,
    "stats": null

这正是我想要在 React 中得到的。

正如您在我的 fetch 方法中看到的,我正在尝试访问它:

.then((response) => console.log(response.body));

但是 response.body 看起来不像 Postman 中的那样。相反,它看起来像这样:

ReadableStream locked: false
locked: false
[[Prototype]]: ReadableStream
cancel: ƒ cancel()
getReader: ƒ getReader()
locked: (...)
pipeThrough: ƒ pipeThrough()
pipeTo: ƒ pipeTo()
tee: ƒ tee()
constructor: ƒ ReadableStream()
Symbol(Symbol.toStringTag): "ReadableStream"
get locked: ƒ locked()
[[Prototype]]: Object
constructor: ƒ Object()
hasOwnProperty: ƒ hasOwnProperty()
isPrototypeOf: ƒ isPrototypeOf()
propertyIsEnumerable: ƒ propertyIsEnumerable()
toLocaleString: ƒ toLocaleString()
toString: ƒ toString()
valueOf: ƒ valueOf()
__defineGetter__: ƒ __defineGetter__()
__defineSetter__: ƒ __defineSetter__()
__lookupGetter__: ƒ __lookupGetter__()
__lookupSetter__: ƒ __lookupSetter__()
__proto__: (...)
get __proto__: ƒ __proto__()
set __proto__: ƒ __proto__()

编辑:根据第一条评论,我试过这个:

如果我尝试console.log(response.json()));,它会给我这个:

Promise <pending>
[[Prototype]]: Promise
[[PromiseState]]: "fulfilled"
[[PromiseResult]]: Object
avatar: "https://cyberpunkv2.s3.us-east-2.amazonaws.com/avatars/cyberpunk-logo-3.jpeg"
handle: "Iggy Dog Yo"
id: 61
role: "Rockerboy"
specialAbilities: null
stats: null
[[Prototype]]: Object

所以在这里我可以看到我需要的 ID,但我怎样才能获得该 ID 以将其分配给变量?

【问题讨论】:

developer.mozilla.org/en-US/docs/Web/API/Fetch_API/Using_Fetchresponse.json() @Khalt 我编辑了我的问题以反映您的建议。谢谢你!我现在离我们更近了。 【参考方案1】:

我想通了。我确信有一种更优雅的方法可以做到这一点,但我这样做了:

      console.log(response.json().then((data) => setNewID(data.id)))

并且能够将NewID 设置为正确的ID。

【讨论】:

以上是关于理解 React 中的 Post 请求响应的主要内容,如果未能解决你的问题,请参考以下文章

如何让我的 C# API 响应来自我的 React 应用程序的 POST 请求? (CORS问题)

如何在django api调用的react js中使用来自post请求的响应部分的数据?

React Express Fetch Post CORS 错误:对预检请求的响应未通过访问控制检查:它没有 HTTP ok 状态

关于post xml的请求和响应

Swift Alamofire 无法解析 POST 请求中的响应 JSON 字符串

为 POST API 请求发送多个响应