解析了json角请求

时间:2018-05-21 17:45:02

标签: angular request put

我的put请求有点问题。在我的nodejs如果请求是成功的,我发送消息json到这样的角度。

res.json({ success: true, message: 'Success'})

在angular中,我在添加或修改数据库中的对象后创建捕获此消息的请求。如果我添加对象,我可以从nodejs捕获此消息,我可以解析此消息,但如果我想修改一个对象,我无法解析json,我有此消息错误。

enter image description here

Classe.service.ts

updateClasse(room, id) {
   const uri = 'http://localhost:4000/api/classes/update/' + id;
   const obj = { room: room };

   this.http.put(uri, obj).subscribe(
     (res:any)=> {
       this.okReq = res.message;
       return this.okReq;
     });
}

Classe.component.ts

  updateClasse(room) {
    this.route.params.subscribe(params => {
       this.service.updateClasse(room, params['id']);
     });
    this.router.navigate(['/classes']);
 }

Classe.html

{{ okReq }}
<form [formGroup]="angForm">
  <div class="form-group">
    <label class="col-md-4">Classe Name</label>
    <input type="text" class="form-control" formControlName="room" #room [(ngModel)] = "classe.room"/>
  </div>
  <div class="form-group">
    <button (click)="updateClasse(room.value)" class="btn btn-primary">Update</button>
  </div>
</form>

2 个答案:

答案 0 :(得分:1)

只需将您的回复 type 更改为 any

 this.http.put(uri, obj).subscribe(
     (res:any)=> {
       console.log(res.message)
});

答案 1 :(得分:0)

您可以使用泛型类型从http操作设置返回值的类型。假设您已经有MessageResponse类型:

interface MessageResponse {
  success: boolean;
  message: string;
}

现在您可以将其用作.put的通用参数:

this.http.put<MessageResponse>(uri, obj)

现在假定res属于MessageResponse类型,您可以将res.message作为字符串值进行访问。

顺便说一句,我不会在你的服务中使用.subscribe。相反,我会在你需要实际调用http请求时使用它,例如在组件或依赖于响应的其他服务中。