2016-08-24 7 views
0

私は、内蔵のhttpsパッケージをロードするnode.jsスクリプトを使用しています。それを使用している場合、私はエラーを取得する:node.jsのみを使用してapi呼び出しで 'withCredentials'を無効にする方法(httpsパッケージ)

XMLHttpRequest cannot load [constructed-api-url]. A wildcard '*' cannot be used in the 'Access-Control-Allow-Origin' header when the credentials flag is true. Origin 'http://localhost:3000' is therefore not allowed access. The credentials mode of an XMLHttpRequest is controlled by the withCredentials attribute.

私はNode.jsの4.4.3を使用していて、そのhttps api docsが本当にwithCredentialsについては何も言及していません。

使用されているスクリプトはthis oneです。

node.js httpsを使用してxhr呼び出しのwithCredentialsをfalseに設定する必要はありますか?

私はこのjQueryのAJAX呼び出し(ちょうどXHR分野に焦点を当てた)に類似したものに探しています:

$.ajax({ 
      type: 'POST', async:true, 
      url: 'https://someapp.constructed.url/token', 
      dataType: "json", 
      contentType: 'application/x-www-form-urlencoded; charset=utf-8', 
      xhrFields: { 
       withCredentials: true 
      }, 
      headers: { 
       'Authorization': 'Basic ' + appInfo      
      },    
      success: function (result) { 
       var token = result.access_token; 
       //…     
      }, 
      error: function (req, status, error) { 
       if (typeof(req) != 'undefined') { 
        var msg = status || req.responseJSON.error; 
        //… 
       }     
      } 
    }); 

あり、別の非常に同様の例があるが、これは要求パッケージ、Iドンに関連しています依存関係に含めたい。私の使用しているスクリプトはすでにhttpsを使用しています。だから、答えはそこにすべての後、すべての時間だった

+1

これは、ブラウザのエラーであり、それはノードとは何の関係もありません。 –

+0

@AlexeyTen:もちろん、ノードのフォルトではありませんが、jquery ajaxの例から、問題の特定のxhrフラグをリクエストコードから設定できることが示されています。これはnode.jsのhttpsモジュールから行うことができますか? – j4v1

+0

ノードはこのフラグを気にしません。あなたのブラウザで実行されるJSコードでそれを探す必要があります。 –

答えて

0

研究のビットの後には、そのノードのhttpsのパッケージは、(ノードのHTTP/HTTPSに記載されていないwithCredentialsオプションを含むHTTPなどの実質的に同じオプションを使用しました、xhrドキュメントの一部)。 withCredentialsオプションに沿ってオプションオブジェクト内にurlオプションを含めるという問題があり、https.getのパラメータとしてoptionsオブジェクトを渡しました。

、次のように構築されたコードは(options変数に焦点を当てる)より以下のようになります。

var options = { 
    url: 'https://my.domain.com/api/endpoint', 
    withCredentials: false 
} 
var querystring = '?key=' + [_my_api_key]; 
var param1 = '&' + [paramKey] + '=' + [paramValue]; 

var datos; 

options.url += querystring; 
options.url += param1; 

https.get(options, function (res) { 
    res.on('data', function (data) { 
    datos += data; 
    }); 

    res.on('end', function() {  
    try { 
     var data = JSON.parse(datos); 
    } catch (e) { 
     console.error('Unable to parse response as JSON', e); 
    } 
    }); 
}).on('error', function (e) { 
    console.error('An error occurred with the request:', e.message); 
    callback(e.message); 
}); 
関連する問題