Angular 2 http.post () não está enviando a solicitação

Quando faço uma solicitação de postagem, o http 2 angular não está enviando essa solicitação

this.http.post(this.adminUsersControllerRoute, JSON.stringify(user), this.getRequestOptions()) 

o post http não é enviado para o servidor, mas se eu fizer o pedido como este

 this.http.post(this.adminUsersControllerRoute, JSON.stringify(user), this.getRequestOptions()).subscribe(r=>{}); 

Isso é pretendido e se é alguém pode me explicar por quê? Ou é um bug?

Como o método post da class Http retorna um observável, é necessário assiná-lo para executar seu processamento de boot. Observables são preguiçosos.

Você deve dar uma olhada neste vídeo para mais detalhes:

O método Get não requer o uso do método subscribe, mas o método post requer a subcribe. Obter e postar códigos de amostra estão abaixo.

 import { Component, OnInit } from '@angular/core' import { Http, RequestOptions, Headers } from '@angular/http' import 'rxjs/add/operator/map' import 'rxjs/add/operator/catch' import { Post } from './model/post' import { Observable } from "rxjs/Observable"; @Component({ templateUrl: './test.html', selector: 'test' }) export class NgFor implements OnInit { posts: Observable model: Post = new Post() /** * */ constructor(private http: Http) { } ngOnInit(){ this.list() } private list(){ this.posts = this.http.get("http://localhost:3000/posts").map((val, i) => val.json()) } public addNewRecord(){ let bodyString = JSON.stringify(this.model); // Stringify payload let headers = new Headers({ 'Content-Type': 'application/json' }); // ... Set content type to JSON let options = new RequestOptions({ headers: headers }); // Create a request option this.http.post("http://localhost:3000/posts", this.model, options) // ...using post request .map(res => res.json()) // ...and calling .json() on the response to return data .catch((error:any) => Observable.throw(error.json().error || 'Server error')) //...errors if .subscribe(); } } 

Você deve assinar o retornável observável se quiser que a chamada seja executada.

Veja também a documentação do Http .

Sempre se inscreva!

Um método HttpClient não inicia sua solicitação HTTP até você chamar subscribe () no observável retornado por esse método. Isto é verdade para todos os methods HttpClient .

O AsyncPipe se inscreve (e desubscreve ) para você automaticamente.

Todos os observáveis ​​retornados dos methods HttpClient são frios por design. A execução da solicitação HTTP é adiada , permitindo que você estenda o observável com operações adicionais, como tap e catchError antes que algo realmente aconteça.

Chamar subscribe(...) aciona a execução do observável e faz com que o HttpClient componha e envie a solicitação HTTP para o servidor.

Você pode pensar nesses observáveis ​​como blueprints para solicitações HTTP reais.