2017-01-21 67 views
0

我想發佈一些數據節點服務器,但我有一個問題:角http.post作爲選項方法請求

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); 
    } 

這是我的POST請求通過網絡選項卡我認爲這是選項方法,而在服務器上我期待一個post請求。

如果我省略http.post中的選項,那麼我會在服務器上獲取發佈請求,但隨後出現意外內容類型的錯誤。

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); 
    } 

這是預期的行爲還是我在做一些錯誤的帖子。我在官方角度指南上發現了這個代碼:server-communication 如何處理這種情況,我需要在客戶端更改某些內容還是應該在服務器端處理?

編輯:

這是我的服務器代碼:

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

什麼是頭被設置與'{標題:標題}'? –

+0

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

+0

您的代碼的第一塊問題是什麼?它不啓動一個發佈請求? –

回答

1

的問題是在服務器端。你需要實現hanlder選項。 例如:

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

謝謝,我不使用快遞,但我實現了服務器上的選項方法,它工作。它首先把選項請求,然後發佈請求。我的問題是預計會這樣做嗎? – freshbm