0

APIを使用してVoltDBにクエリを実行しようとしています:

    const url = 'http://server:8080/api/1.0/'
    const queryParam = encodeURIComponent('select * from table')
    const queryURL = url + `?Procedure=@AdHoc&Parameters=['${queryParam}']&jsonp=console.log`

    fetch(queryURL).then( response => {
        response.text().then( text => console.log(text) )
    })

そのコードでは、「No Access-Control-Allow-Origin」エラーがスローされます。フェッチ呼び出しをこれに変更すると:

    fetch(queryURL, { mode: 'no-cors').then( response => {
        response.text().then( text => console.log(text) )
    })

それは何もしません

4

2 に答える 2

1

これはブラウザのセキュリティ機能です。ある URL から Web ページを提供していて、ページ内に別のホストまたはポートへの URL 呼び出しを埋め込んでいる場合、ブラウザーはこれを許可しません。

これを回避する 1 つの方法は、Web サーバーにプロキシを追加することです。これにより、ポート 8080 への呼び出しを行い、同じオリジンから Web ページに応答を返すことができます。

CORS を使用してこのエラーを回避する方法について、スタック オーバーフローでいくつかの回答が表示される場合がありますが、これには VoltDB がポート 8080 で使用するヘッダーを変更する必要があるため、自分でできることではなく、その予定はありません。

別の解決策は、NBBO デモ ダッシュボードなど、一部のデモで提供されている voltdb.js ファイルを使用することです: https://github.com/VoltDB/voltdb/tree/master/examples/nbbo/web

これは、低レベルの JavaScript を使用してソケットを開き、XMLHttpRequest を使用せずに HTTP 呼び出しを行うため、No Access-Control-Allow-Origin エラーを回避できると思います。

この例では、NBBO の例に固有のコードは demo.js にあり、voltdb-dashboard.js にはさまざまなサンプル ダッシュボードに共通のコードが含まれています。また、voltdb.js は呼び出しプロシージャへの非同期的なアクセスを提供する基本ライブラリです。

于 2016-11-01T16:01:01.857 に答える