2017-01-21 2 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); 
    } 

Это мой пост запрос на на вкладке Network Я вижу это как опции метод, пока на сервере я ожидаю почтовый запрос.

Если я опускаю параметры из 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 Как справиться с этой ситуацией, нужно ли что-то менять на стороне клиента или я должен обрабатывать ее на стороне сервера?

EDIT:

Это мой код сервера:

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