2017-05-26 89 views
0

我正在通过REST api在后端构建一个小的Angular前端支持,但我遇到了一个非常奇怪的问题:做http.post(url,data,params)结果什么都没有发生(没有任何迹象表明请求曾经触及网络服务器,在Chrome开发人员工具中,绝对没有记录与this.http.get()请求相反的请求,这对于同一服务器上的URL可以正常工作)。无法通过在角4中的HTTP发送POST请求

export class RestComponent { 

    constructor (private http: Http) {} 
    sendStuff() { 
     let headers = new Headers({ 'Content-Type': 'application/json' }); 
     let options = new RequestOptions({ headers: headers }); 

     this.http.post('http://localhost:3021/api/data', {'data': 3}, options) 
      .catch(this.handleError); 
    } 
} 
  • CORS是
  • 在URL this.http.get按预期工作
  • 有一个在请求被发送过
  • 服务器日志没有证据也没有在服务器上启用在Chrome开发人员工具中证明请求已发送(无此类post请求)
  • 在.post()调用显示所有内容符合预期(头,数据等)之前在方法中记录东西
  • 复制在邮差请求工作(相同的标题和数据)
  • 试图stringyfying数据以及
  • 错误处理程序做一些简单的记录,但它不会触发

我觉得这很愚蠢必须是相当明显的东西,但它逃脱了我。我创建了一个简单的组件,其中只有两个方法,一个通过post发送硬编码数据,另一个通过get获取硬编码的json,第二个工作,但第一个不行。

将不胜感激任何指针。

谢谢!

+0

的可能的复制[Angular2 HTTP POST请求(https://stackoverflow.com/questions/38664460/angular2-http-post-request) – Matt

回答

3

基本上你创造了只是一个可观察和可观察在本质上偷懒。只有当有人订阅时,他们才会打电话/发出。因此,您必须致电subscribe以从其返回的Observable使您的代码正常工作。除此之外,一切似乎都是完美的。

sendStuff() { 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    return this.http.post('http://localhost:3021/api/data', {'data': 3}, options) 
     .catch(this.handleError) 
     .subscribe(
     (data) => console.log(data) 
    ); 
} 
+0

你是绝对正确的!谢谢!奖金问题:是否有一种方法可以在不需要订阅的情况下调用帖子(例如:是否有类似的方法不会返回Observable?) - 在这种情况下,它是一个“发送并忘记”的调用,除了错误和可能的错误代码我对回复不感兴趣。 –

+1

@AndreiDascalu你必须至少订阅一次才能执行/调用observable函数一次..你可以保持订阅空白,这取决于你。 –

0

没有服务器代码供我们查看,但请确保路由设置为预期内容类型application/json,因为默认情况下,发布路径会期望发布数据,具体取决于您使用的服务器技术。

也可以尝试只是在做一个相对路径可能:.post('/api/data')