カテゴリー
開発中のSvelte/SvelteKitのDevサーバーのCORS対策
※ 当ページには【広告/PR】を含む場合があります。
2024/12/18

Svelteアプリ開発中でも、外部のサイトへHTTPリクエストを飛ばしたいときがあります。
とはいえ、接続先のサーバーの設定にもよりますが、ほとんどの場合、クロスオリジンドメイン防止の対応がなされており、Devサーバー(
http://localhost
893x301

以前の記事において、
今回は、そのSvelte版のお話ということで、手短に説明しておきます。
Viteのサーバープロキシ機能
単刀直入にいうと、Viteにも
プロキシルートの概念について復習しておくと、おおよそ以下のような模式図になります。
978x575

つまり、自身のドメイン内に定義したルートにアクセスした場合、Viteの受け持つDevサーバーがアプリケーションに代わり外部へ接続してくれています。
では一例として、Viteのプロキシルートの定義してみます。
設定は、
vite.config.ts(もしくはvite.config.js)
import { defineConfig } from 'vite';
// ...
export default defineConfig({
// ...
server: {
proxy: {
'/api': {
target: "https://hoge.piyo.com",
changeOrigin: true,
rewrite: (path) => path.replace(/^\/api/, '')
}
}
}
})
上の例だと、
http://localhost:12345/api
target
https://hoge.piyo.com/api
ただ、便宜上
/api
rewrite
ここでは、
rewrite
https://hoge.piyo.com/api
/api
https://hoge.piyo.com
より詳しいProxy設定は以下のリファレンスの内容でご確認ください。
プロキシルートを利用する場合、アクセス先のドメイン部分を、プロキシルート名で置き換えるような一手間が必要になります。
cosnst url = 'https://hoge.piyo.com/?huga=moga&buyo=jifo';
const urlForProxy = url.replace(/^https\:\/\/hoge\.piyo\.com/m, '/api');
const response = await fetch(urlForProxy, {
method: 'GET',
headers: {
'content-type': 'application/json'
},
});
const rslt = await response.text();
//OR, const rslt = await response.json();
console.log(rslt);
これで開発サーバーを実行し、外部サイトにアクセスできていたらOKです。
697x297

(※ 図は外部サーバーの一例でAWS S3にアクセスしたときのものです。)
余談〜ViteのCORS設定の注意点
別解として触れておくと、Viteの設定項目に
開発者にとってはCORS対応はいつも頭の痛くなる問題であり、あまり深く考えたくもないので、「
cors: true
import { defineConfig } from 'vite';
// ...
export default defineConfig({
// ...
server: {
cors: true
}
})
いざ、これで開発サーバーから外部へ接続できたかというと...
893x301

全く問題が解決していません。
"CORS"という名前で勘違いしやすい設定項目かもしれませんが、先程のプロキシ機能がDevサーバーから外部へのアクセスを可能とするものに対して、こちらのCORS機能は外部のドメインからDevサーバーへアクセスする際のCORSルールの設定を行うものです。
これによって、今回の主題とは関係はないのですが、
Express/CORS
まとめ
今回は外部のサイトにアクセスする必要があるタイプのSvelte(クライアント)アプリの開発では必須ともいえる、Viteのプロキシルート機能について解説しました。
フロントエンドの開発をやっていると、ちょくちょくCORSの問題につまずくことも多いので、開発中はViteのプロキシルートを忘れずに活用していきましょう。
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー