Angular http post请求总是发送一个空对象

时间:2017-07-20 11:10:35

标签: angular http

我正在尝试使用angular发布一些数据,当我用Postbin检查它时,我在响应中不断获得一个空对象。我在我的代码中的其他地方订阅了这个函数,所以我确定请求正在通过:

使用Postman一切正常,但我看不出下面的代码有什么问题:

postRequest(order): Observable<any> {
    const headers = new Headers();
    headers.append('Content-Type', 'application/json');
    const data = {
      "data": {
        "ID": "1",
        "Name": "John",
        "Class": "Adventurer",
        "Items": [
          "641",
          "642",
          "643",
          "513",
          "512"
        ]
      }
    }
    return this.http.post('https://requestb.in/wjoscywj', { body: JSON.stringify(data) }, { headers: headers })
      .map(this.extractData)
      .catch(this.handleError);
  }

  private extractData(res: Response) {
    let body = res.json();
    return body || {};
  }

  private handleError(error: any) {
    let errMsg = (error.message) ? error.message :
      error.status ? `${error.status} - ${error.statusText}` : 'Server error';
    console.error(errMsg);
    return Observable.throw(errMsg);
  }

1 个答案:

答案 0 :(得分:1)

我会调整一些事情:

 headers.append('Content-Type', 'application/json; charset=utf-8');

安全起见。

你确实想要JSON.stringify。我通常在没有{body:}的情况下这样做 标题相同。 所以你有

this.http.post('https://requestb.in/wjoscywj', JSON.stringify(data), headers);

您可以使用地图

map((resp:Response) => resp.json()) 

请记住,您必须订阅一个Observable才能开始。

在您的情况下,我倾向于使用签名服务:

postRequest(order): Observable<Response> {
   //setup headers and do post here
}

这样你在方法级别仍然具有类型安全性。

然后,在调用函数中执行map并订阅如下:

this.postRequest(order)
  .map((resp:Response) => resp.json())
  .subscribe(data =>  { console.log(data);
                        this.data = data;
                      },
             error => { console.error(error)
                      },
             ()    => { // Finally
                      }
   )

订阅包括3个部分:成功,错误,最后 错误&amp;最后是可选的 如果只有一个语句花括号{}是可选的。