2017-01-21 2 views
0

Ich versuche, einige Daten zu dem Knoten Server zu schreiben, aber ich habe ein Problem:Angular http.post als Optionen Methode Anfrage

postEmployeeForm(employee: Employee):Observable<any> { 
     let body = JSON.stringify(employee); 
     let headers = new Headers({ 'Content-Type': 'application/json' }); 
     let options = new RequestOptions({ headers: headers }); 

     return this.http.post('http://localhost:3100/postemployee', body, options) 
      .map(this.extractData) 
      .catch(this.handleError); 
    } 

Dies ist mein Beitrag Antrag in Registerkarte Netzwerk ich dies als Optionen sehen Methode auf dem Server erwarte ich eine Post-Anfrage.

Wenn ich Optionen aus http.post weglassen, dann bekomme ich Post-Anfrage auf dem Server, aber dann habe ich einen Fehler über den unerwarteten Inhaltstyp.

postEmployeeForm(employee: Employee):Observable<any> { 
     let body = JSON.stringify(employee); 

     return this.http.post('http://localhost:3100/postemployee', body) 
      .map(this.extractData) 
      .catch(this.handleError); 
    } 

Ist das erwartet Verhalten oder ich mache etwas falsch mit Post. Ich fand diesen Code auf offiziellen Winkelführung: server-communication Wie mit dieser Situation umzugehen, muss ich etwas auf der Clientseite ändern oder sollte ich das auf der Serverseite behandeln?

EDIT:

Das ist mein Server-Code:

var http = require('http'); 
var formidable = require("formidable"); 
var util = require('util'); 

var server = http.createServer(function(req, res) { 
    res.setHeader('Access-Control-Allow-Origin','*'); 
    res.setHeader('Access-Control-Allow-Headers','Origin, X-Requested-With, Content-Type, Accept'); 

    if(req.method.toLowerCase() == 'post') { 
     console.log("Get request!"); 
     processForm(req,res); 
     return; 
    } 
}); 

function processForm(req,res) { 

    var form = new formidable.IncomingForm(); 
    form.parse(req, function(err, fields) { 

     res.writeHead(200, { 
      'content-type': 'application/json' 
     }); 

     res.end(util.inspect({ 
      fields: fields 
     })); 

     console.log('posted fields:\n'); 
     console.log(util.inspect({ 
      fields: fields 
     })); 
    }); 
} 

var port = 3100; 
server.listen(port,'localhost'); 
console.log("server listening on port " + port); 
+0

Was sind die Header mit '{Header: Header} gesetzt wird'? –

+0

@GrishaLevit {'Content-Type': 'application/json'} – freshbm

+0

Was ist das Problem mit dem ersten Block Ihres Codes? Es initiiert keine Post-Anfrage? –

Antwort

1

Das Problem ist auf Server-Seite. Sie müssen hanlder für Optionen implementieren. Beispiel:

app.options("*",function(req,res,next){ 
    res.header("Access-Control-Allow-Origin", req.get("Origin")||"*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    //other headers here 
    res.status(200).end(); 
}); 

http://expressjs.com/en/api.html#app.METHOD

+0

Danke, ich benutze nicht express, aber ich habe die Option Methode auf dem Server implementiert und es hat funktioniert. Zuerst werden die Optionen angefordert und dann die Anfrage gesendet. Meine Frage ist, ist es das zu tun? – freshbm

Verwandte Themen