Açısal 2 http.post () isteği göndermiyor


141

Bir posta isteği yaptığımda açısal 2 http bu isteği göndermiyor

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

http postası sunucuya gönderilmez, ancak isteği bu şekilde yaparsam

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

Bu amaçlandı ve eğer biri bana nedenini açıklayabilir mi? Yoksa bir hata mı?

Yanıtlar:



49

Çağrının yürütülmesini istiyorsanız, geri gönderilen gözlemlenebilir öğeye abone olmanız gerekir.

Ayrıca Http belgelerine de bakın .

Her zaman abone olun!

Bir HttpCliento yöntemle döndürülen gözlemlenebilir üzerinde () abone çağırana kadar yöntemi, HTTP isteği başlamıyor. Bu, tüm HttpClient yöntemler için geçerlidir .

AsyncPipe sizin için otomatik olarak abone (ve abonelikten).

HttpClientYöntemlerden döndürülen tüm gözlenebilirler tasarım gereği soğuktur . HTTP isteğinin yürütülmesi ertelenir ve gözlemlenebilir olanı herhangi bir şey gerçekleşmeden önce tapve gibi ek işlemlerle genişletmenize izin verir catchError.

Çağrı subscribe(...), gözlemlenenin yürütülmesini tetikler HttpClientve HTTP isteğinin oluşturulmasına ve sunucuya gönderilmesine neden olur .

Bu gözlemlenebilirleri, gerçek HTTP istekleri için taslaklar olarak düşünebilirsiniz .

Aslında, her biri subscribe()gözlemlenebilir olanın ayrı, bağımsız bir uygulamasını başlatır. İki kez abone olmak iki HTTP isteğiyle sonuçlanır.

content_copy
const req = http.get<Heroes>('/api/heroes');
// 0 requests made - .subscribe() not called.
req.subscribe();
// 1 request made.
req.subscribe();
// 2 requests made.

41

Get yöntemi abone olma yöntemini kullanmak zorunda değildir, ancak sonrası yöntemi abone olmayı gerektirir. Örnek kodları alın ve yayınlayın aşağıdadır.

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<Post[]>
    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) => <Post[]>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();
    }
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.