带有 json-server 的 Angular 7 - 如何检索发布响应中返回的 id?

Posted

技术标签:

【中文标题】带有 json-server 的 Angular 7 - 如何检索发布响应中返回的 id?【英文标题】:Angular 7 with json-server - how do you retrieve the id returned in a post response? 【发布时间】:2019-08-24 07:56:50 【问题描述】:

使用以下 http 选项:

const httpOptions: any = 
  headers: new HttpHeaders(
    'Content-Type': 'application/json'
  ),
  observe: 'response'
;

我正在向 json-server 端点发送一个 http 帖子,如下所示:

return this.http.post(`$this.baseUrl/events`, myEvent, httpOptions);

订阅帖子的代码如下:

this.api.saveEvent(this.event).subscribe(data => 
  // Need to pick up the id from data (HttpResponse) here
);

我可以看到订阅中返回的dataHttpResponse 类型 - 投射data 的正确方法是什么,以便我可以访问响应的body 属性并获取@987654330 json-server返回的@属性?

更新:根据下面的 cmets,我最终得到了返回 Observable<HttpRespponse<Event>>saveNewEvent 方法,但是这只有在我将 http 选项作为内联匿名对象传递时才有效。在 const 中设置选项并在 post 方法中引用该 const 不起作用,我还没有弄清楚原因。有什么想法吗?

【问题讨论】:

能否请您发布服务器的实际响应,以便我们看到需要处理的返回数据。 【参考方案1】:

当您指定可以获取数据的类型时,只需确保您的 API 正确返回它即可。

return this.http.post<id: Number>(`$this.baseUrl/events`, myEvent, httpOptions);

this.api.saveEvent(this.event).subscribe(data => 
  console.log(data.id);
);

【讨论】:

试过这个会导致编译错误:Property 'id' does not exist on type 'Object' - 你还需要在订阅中转换data吗? 取得了一些进展 - 如果我使用内联匿名类型为选项调用 post 方法:return this.http.post&lt;Event&gt;('$this.baseUrl/events', event, observe: 'response');,那么我可以从我的 api 服务返回 Observable&lt;HttpResponse&lt;Event&gt;&gt;,并且我的组件可以在何时访问 data.body.id订阅响应。 但是,如果我像这样在 const 匿名类型中设置选项:const options: any = observe: 'response' ; 然后调用 post 方法:return this.http.post&lt;Event&gt;('$this.baseUrl/events', event, options); 然后我得到 Type 'HttpEvent&lt;Event&gt;' is not assignable to type 'HttpResponse&lt;Event&gt;'. 那么传递选项的方式有什么区别? 在我的示例中,来自服务器的响应将是 JSON 响应,类似于 "id": 123 。通过将类型设置为如上所述。它会自动映射到 json 到 object/id。对我来说,您还可以删除 observe: 'response' 声明。据我介绍,混合了 angular 和 nodejs 的概念(在 nodejs 中,您在处理 json 时使用 req 和 body)。 httpclient.post() 方法返回一个 HttpResponse 的实例,它有一个 body 属性。这是一个 Angular 类 - 你如何看待它混合了 Angular 和 Node?​​span>

以上是关于带有 json-server 的 Angular 7 - 如何检索发布响应中返回的 id?的主要内容,如果未能解决你的问题,请参考以下文章

从 Angular 前端到 json-server 的 GET 调用访问被 CORS 策略阻止的 XMLHttpRequest

如何从 Angular http.get 中的 json-server 读取 X-Total-Count?

在 Angular 应用程序中将 json 文件(从 json-server)下载为 txt 或 json 或 csv 文件

Angular 8 业力忽略服务请求

Visual Studio Code作为Angular开发工具常用插件安装json-server安装与使用angular/cli安装失败问题

带有 express/db.json 的 json-server 未反映更改