无法在Angular 4中通过HTTP发送POST请求

时间:2017-05-26 19:48:01

标签: javascript rest angular

我正在后端用REST api构建一个小的Angular前端支持,但是我遇到了一个非常奇怪的问题:做http.post(url,data,params)会导致什么都没发生(那里有's' s没有迹象表明该请求曾经访问过网络服务器,在Chrome开发者工具中,与this.http.get()请求相反,绝对没有记录任何请求,这对于同一服务器上的URL工作正常。)

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
  • this.http.get在URL上按预期工作
  • 服务器日志中没有证据表明发送了请求
  • Chrome开发者工具中没有证据表明请求已发送(没有此类帖子请求)
  • 在.post()调用之前的方法中记录内容,显示所有内容都符合预期(标题,数据等)
  • 复制邮递员中的请求(相同的标题和数据)
  • 尝试使用stringyfying数据
  • 错误处理程序执行一些简单的日志记录,但未触发

我感到非常愚蠢,因为它必须是相当明显的东西,但却逃脱了我。我创建了一个简单的组件,只有两个方法,一个通过post发送硬编码数据,另一个通过get获取硬编码json,第二个工作但第一个没有。

不胜感激。

谢谢!

2 个答案:

答案 0 :(得分:4)

基本上你只创造了一个可观察的,而Observable本质上是懒惰的。只有当有人订阅它们时,它们才会得到呼叫/发出。因此,您必须将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)
    );
}

答案 1 :(得分:0)

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

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