2016-05-03 5 views
1

Я начинаю с Angular 2, и я хочу сделать почтовый вызов на моем сервере node.js для обновления данных. Это код в моей службы:Как сделать правильный HTTP-вызов в Angular 2?

updateEmployee(id : string, firstName? : string, lastName? : string){ 
    let body : string = JSON.stringify({ "firstName" : "test", "lastName" : "testtwo"}); 

    return this.http.post(this._employeesUrl + id, body) 
     .map(res => res.json()) 
     .catch(this.handleError); 
    } 

Мой код маршрута API:

exports.update = function(req, res) { 
    Employee.model.findById(req.params.id).exec(function(err, item) { 

    if (err) return res.apiError('database error', err); 
    if (!item) return res.apiError('not found'); 
    console.log(req); 
    var data = (req.method == 'POST') ? req.body : req.query; 

    item.getUpdateHandler(req).process(data, function(err) { 

     if(req.body.firstName){ 
     item.firstName = req.firstName; 
     } 
     if(req.body.lastName){ 
     item.lastName = req.body.lastName; 
     } 

     if (err) return res.apiError('create error', err); 

     res.apiResponse(
     200 
    ); 

    }); 

    }); 
} 

Когда я делаю пост вызова с почтальоном, все работает отлично, но в угловых 2 я, кажется, не получите параметр body. Как это делается правильно? Я много пробовал, но никто из них не работал.

Я попытался добавить заголовки в настройках, но это не решает проблему:

Error after adding headers

+0

Я бы попытался сделать это с помощью jQuery ajax или прямо с простым простым запросом javascript, просто чтобы убедиться, что все в порядке, потому что код углового2 выглядит хорошо, и я вижу, что вы не нашли 404, что означает проблему с сервером. – tibbus

+0

Могу ли я просто импортировать jquery ajax librarie? –

+0

ах, правда, немного сложно использовать jQuery с angulr. Нет, к сожалению, вы не можете просто импортировать его: http://stackoverflow.com/questions/30623825/how-to-use-jquery-with-angular2. Но вы можете просто добавить скрипт jQuery в заголовок HTML и попробовать запрос с консоли :) – tibbus

ответ

0

мне нужно, чтобы добавить заголовки в rgvassar сказал:

let body : string = JSON.stringify({ "firstName" : firstName, "lastName" : lastName}); 
    let headers = new Headers({ 'Content-Type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 
    return this.http.post(this._employeesUrl + id, body, options) 
    .map((res: Response) => res) 

Но была проблема CORS на моем API (сделанный с Keystonejs), потому что я послать заголовок с запросом, я необходимых для разрешения ВАРИАНТОВ на CORS. Эти две вещи разрешили проблему.

2

Вы должны добавить заголовок content-type.

updateEmployee(id : string, firstName? : string, lastName? : string){ 
    let body : string = JSON.stringify({ "firstName" : "test", "lastName" : "testtwo"}); 
    let headers = new Headers({ 'content-type': 'application/json' }); 
    let options = new RequestOptions({ headers: headers }); 

    return this.http.post(this._employeesUrl + id, body, options) 
     .map(res => res.json()) 
     .catch(this.handleError); 
    } 
+0

Я уже пробовал это и получил сообщение об ошибке, когда браузер пытается выполнить запрос. Я добавил скриншот в OP. –

Смежные вопросы