Electronアプリを作成していますが、APIプロバイダーがCORSを有効にしていない場合はAPIを呼び出す必要があります。通常提案されるソリューションは、次のようなノードとcors-anywhereを使用してローカルで実行する場合に簡単なリバースプロキシを使用することです。
let port = (process.argv.length > 2) ? parseInt (process.argv[2]) : 8080;
require ('cors-anywhere').createServer ().listen (port, 'localhost');
その後、localhost:8080のリバースプロキシを介してすべてのリクエストをプロキシするようにアプリを構成できます。
だから、私の質問は:
Electronアプリのどこでもノードとcorsを使用してリバースプロキシを作成することは可能ですか?アプリにリモートサーバーへの呼び出しを強制したくありません。
Electronアプリでこれを行うより良いまたは標準的な方法はありますか?私はCORSの問題に最初に出くわしたのではないと思っています。 :)
このようにリクエストを送信する前にヘッダーをオーバーライドするだけです
const filter = {
urls: ['*://*.google.com/*']
};
const session = electron.remote.session
session.defaultSession.webRequest.onBeforeSendHeaders(filter, (details, callback) => {
details.requestHeaders['Origin'] = null;
details.headers['Origin'] = null;
callback({ requestHeaders: details.requestHeaders })
});
これらのコードをレンダラープロセスに配置する
今日この問題が発生しました React Electronにバンドルされているアプリは400を返しています
Electronの呼び出しは、API URLの通常の呼び出しとして機能することから、CORSの影響を受けないことがわかります。
これで、コールをCORSプロキシでラップし、プロキシを定期的に呼び出すと、CORSコールではないため、400エラーでエラーになるはずです。このスレッドは、cors-anywhereがそのように応答する理由を説明します=> https://github.com/Rob--W/cors-anywhere/issues/39
Electronをビルドする前に、アプリから実際にCORSプロキシを削除しました。ブラウザでテストしているので、開発にはまだCORSプロキシが必要です。
お役に立てれば。