2016-05-03 6 views
1

私はAngular 2から始めています。私はnode.jsサーバーへのポストコールを行い、データを更新したいと思います。これは私のサービスのコードです:Angular 2で適切なhttpポストコールを行うには?

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リクエストを使って直接試みていますが、angle2コードは正常に表示され、サーバーの問題を意味する404が見つかりません。 – tibbus

+0

jquery ajax librarieをインポートできますか? –

+0

ああ、確かに、jQueryを怒りと一緒に使用するのはちょっと難しいことです。いいえ、悲しいことに、それをインポートすることはできません:http://stackoverflow.com/questions/30623825/how-to-use-jquery-with-angular2。しかし、HTMLヘッダーにjQueryスクリプトを追加して、コンソールからリクエストを試すことができます:) – 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) 

しかし、私は要求してヘッダを送信するので、私のAPIのCORSの問題は、私は、(Keystonejsで作られた)もありましたCORSのOPTIONSを許可する必要がありました。この2つのことが問題を解決しました。

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でスクリーンショットを追加しました。 –

関連する問題