2016-08-08 5 views
1

Ich habe dieses auf Winkel 2-Daten (HTTP-Dienst) in meiner Anwendung GET:Http Service POST

private _url = "http://10.77.7.77/monitoring/api/v1/services/list"; 

    constructor(private _http: Http) { 

    } 

    getServices(): Observable<any> { 
     return this._http.get(this._url) 
      .map(res => res.json()); 
    } 

Und alles ist in Ordnung, aber jetzt ist meine Aufgabe, ein POST-Daten erstellen, mit einer anderen URL:

private _url2 = 'http://10.77.7.77/monitoring/api/v1/action/stop'; 

id - Anzahl der Service diese json:

[{ 
"nodename": "10.46.2.152", 
"servicelist": [{ 
    "id": "3827aa4b204fc2e122f452c1c1ceeaf15109364698d5d0f2153efa6e9487a968", 
    "name": "Nginx", 
    "status": "Online", 
    "servicecontrolled": true 
}] 

ich diese POST-Daten geschrieben:

postServices(post: { title: string, status: string, id: number }): Observable<any> { 
     let _url3 = `${this._url2}/${post.id}` 
     let headers = new Headers(); 
     headers.append('Content-Type', 'application/json'); 
     const body = JSON.stringify(post); 
     return this._http.post(_url3, body, post) 
      .map(res => res.json()) 
    } 

mit diesem Ereignis

onPost(title: string, body: string, id: string) { 
    this._service.postServices({title: title, body: body, id: +id}) 
    .subscribe(
     response => this.response = response, 
     error => console.log(error) 
    ); 
} 

und diese meine Vorlage:

<button *ngIf="!!service_rec.servicecontrolled" 
[style.background-color]="service_rec.controlled 
== 'true' ? 'green' : 'orange'" 
class="btn btn-warning" 
(click)="onPost()"> 
{{ service_rec.servicecontrolled | json | toOnOff }} 
</button> 

und ich habe jetzt einige Fehler 500 (Internal Server Error)

+0

wir heute einen Web-Service geschrieben. Als wir versuchten, einen Rückgabewert zu erhalten, von dem wir wissen, dass er nicht in der Datenbank ist, hat er einen internen Serverfehler zurückgegeben. Vielleicht ist der Wert nicht dort – gunescelil

Antwort

0

Wenn Sie JSON-Daten veröffentlichen möchten, verwenden Sie einfach die folgende:

// From RC2 
postServices(post: { title: string, body: string, id: number }): Observable<any> { 
    return this._http.post(this._url2, post) 
     .map(res => res.json()) 
} 

Angular2 stellt automatisch den Inhaltstyp application/json ein und serialisiert Ihr Postobjekt (JSON.stringify).

Wenn Sie möchten, indem Sie Ihren eigenen JSON Inhalt serialisiert werden (vor RC2 ausgeschlossen), müssen Sie explizit den Inhaltstyp hinzuzufügen:

postServices(post: { title: string, body: string, id: number }): Observable<any> { 
    let headers = new Headers(); 
    headers.append('Content-Type', 'application/json'); 
    return this._http.post(this._url2, post, { headers }) 
     .map(res => res.json()); 
} 
+0

Ich habe Fehler in 'return this._http.post (this._url2, post, {headers})' -> Visual Code schrieb 'Argument des Typs ist nicht zuweisbar' –

+0

welche Version von Angular2 tun Sie benutzen? –

+0

angular 2 rc1, Fehler in "post" und log 'Argument des Typs ist nicht zuweisbar' –