2017-03-10 10 views
4

express.jsの上にREST APIを構築しています。ルート内の変数を更新するのに問題があります。Express.js経路内のhttpコールで変数が更新されない

例:

私はrequest-promiseライブラリを使用してHTTPリクエストを呼び出すことにより、私は始めるこのルートインサイドapp.get("/wp/page/create/:id", function(req, res)

を呼んでいます。ネストされたhttp呼び出しでこの呼び出しの応答を使用します。

ネストされた呼び出しのヘッダーにグローバル変数を使用し、etag変数を使用して変更する必要があるのはヘッダーです。

コード:

global.postHeaders = headers; 
postHeaders['X-HTTP-Method'] = "MERGE"; 
postHeaders['Content-Type'] = 'application/json;odata=verbose'; 
postHeaders['X-RequestDigest'] = spContext; 

request.get({ 
url: "xxx", 
headers: headers, 
json: true 
}).then(function(response) { 
    var etag = response.d.__metadata.etag 
    postHeaders['If-Match'] = etag; 

    request.post({ 
     url: "xxx", 
     type: "POST", 
     body: data, 
     headers: postHeaders, 
     json: true 
     }).then(function(data) { 
      res.send(data).end() 
      console.log("All done!"); 
     }) 
}) 

私は、サーバーの起動を開始し、すべてが正常に動作しますルートを入力します。私は再びそれを更新しようとしても、etagの変数は同じです。

サーバーを再起動すると、最初の試行では再び動作しますが、2番目と3番目の試行では失敗します。

私が間違っていることは何ですか?

答えて

3

私は問題を解決しました。簡単な解決策は、変数を含むヘッダーをクリアすることでした。

global.postHeaders = headers; 
postHeaders['X-HTTP-Method'] = "MERGE"; 
postHeaders['Content-Type'] = 'application/json;odata=verbose'; 
postHeaders['X-RequestDigest'] = spContext; 

request.get({ 
url: "xxx", 
headers: headers, 
json: true 
}).then(function(response) { 
var etag = response.d.__metadata.etag 
postHeaders['If-Match'] = etag; 

    request.post({ 
    url: "xxx", 
    type: "POST", 
    body: data, 
    headers: postHeaders, 
    json: true 
    }).then(function(data) { 
     postHeaders['If-Match'] = ""; 
     res.send(data).end() 
     console.log("All done!"); 
    }) 
}) 
1

postHeadersはグローバル変数です。 global.postHeaders = headers;のヘッダーでもありますか?あなたがここでやろうとしていることは、ひどく間違っています。 postHeaders変数は複数のリクエストで共有されます。したがって、postHeaders['If-Match']の値が空の文字列またはエタグの場合があります。

ではなく、最初の行 var postHeaders = Object.assign({}, headers);

ないあなたがしようとしているのかわからのこれを試してみてください、しかしで-少なくともこの文はコード内の巨大なエラーが治まるだろう。これにより、リクエストごとに新しいヘッダーオブジェクトが作成されます。

関連する問題