2016-08-10 3 views
1

Ich kann nicht verstehen, warum ich http in Angular2 nicht verwenden kann.Angular2 Http PUT gibt falsche RequestMethod

Wenn ich http Post mache, ist es die richtige Anforderungsmethode geben:

enter image description here

aber wenn ich http setzen: es Optionen wie die Request-Methode geben:

enter image description here

Ich meinte, was zum Teufel ist das? Hier

ist die Methode, die ich für Post bin mit:

let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 
    let options = new RequestOptions({ headers: headers }); 
    var body = 'amount=' + 12; 
    this.http.post(this.host + '/orders', body, options) 
    .map(res => res.json()) 
    .subscribe(data => { 
    resolve('success') 
    }); 

Hier ist die Methode, die ich für PUT bin mit.

let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' }); 
    let options = new RequestOptions({ headers: headers }); 
    let body = 'amount=' + 12; 
    this.http.put(this.host + '/orders/1', body, options) 
    .map(res => res.json()) 
    .subscribe(data => { 
    resolve('success') 
    }) 

Antwort

1

Ich denke, dass es wegen CORS ist. Es ist nicht mit Angular2 verwandt. Im Fall Ihrer POST-Methode wird eine einfache Methode ausgeführt. Im Fall von PUT sind Sie im Falle eines Preflight, so dass eine zusätzliche Anfrage (eine OPTIONS) vom Browser unter die Haube involviert wird. Und es scheint, dass Sie bei dieser OPTIONS-Methode 404 haben.

Zur Erinnerung:

Einfache Anfragen. Dieser Anwendungsfall gilt, wenn wir die Methoden HTTP GET, HEAD und POST verwenden. Bei POST-Methoden werden nur Inhaltstypen mit folgenden Werten unterstützt: text/plain, application/x-www-form-urlencoded und multipart/form-data.

Vorbeleuchtete Anfragen. Wenn der Anwendungsfall "Einfache Anforderungen" nicht zutrifft, wird eine erste Anforderung (mit der HTTP OPTIONS-Methode) ausgeführt, um zu prüfen, was im Zusammenhang mit domänenübergreifenden Anforderungen durchgeführt werden kann.

denke ich, dass diese Artikel, die Sie interessieren könnten:

+0

Aber ich getestet in der Update-Methode mit Postman, es funktioniert gut, auch in meinem Server, express, ich habe all diese aktiviert: res.setHeader ('Access-Control-Allow-Origin', '*'); res.setHeader ('Access-Control-Allow-Methoden', 'GET, POST, OPTIONS, PUT, PATCH, DELETE'); res.setHeader ('Access-Control-Erlaube-Header', 'X-Requested-With, Inhaltstyp'); res.setHeader ('Zugriffskontrolle-Erlauben-Anmeldeinformationen', wahr); – Vicheanak

+0

Ja, aber mit Postman sind Sie in einem Chrome-Plugin, so dass Sie weniger Einschränkungen haben können. Das ist großartig für die CORS-Header auf der Serverseite. Aber es ist nicht genug in Bezug auf CORS Preflight-Anfragen. Sie sollten das 'cors'-Modul in Ihrer Express-Anwendung verwenden: https://github.com/expressjs/cors#enabling-cors-pre-flight (global oder pro Anfrage). –