カテゴリー
【サーバーサイドAngular】AngularでビルドしたWebアプリでExpress.jsからCORSプロキシを設定する
※ 当ページには【広告/PR】を含む場合があります。
2022/03/22

前の回では、Angularのローカル開発環境からdevサーバー(webpack-dev-server)を立ち上げて、プロキシルートで外部のオリジンへアクセスする方法を紹介しました。
Angularアプリ開発中はそれでも良かったのですが、開発が進んで、Angularアプリをビルドして、プロダクトをリリースする段階になったときに、
yarn start
この場合、Angular標準のプロキシルートの設定からもおさらばして、プロダクトで利用するサーバーサイド側のプロキシ設定に従う必要があります。
今回はExpressでもプロキシルーティングを実現するための方法を解説していきます。
Angular側のビルド
では前回のプロキシルーティングの構成をもう一度おさらいしておきます。
997x573

プロキシルートの構成は前回と共通とします。
AngularでプロダクトビルドしたWebアプリケーションであっても、結局はブラウザから使うことには変わりありませんので、同一オリジンポリシーのルールが課させることには違いありません。
AngularのプロダクトSPAを準備する
とりあえず通常のビルドでAngularのSPA(シングルページアプリケーション)を生成します。
$ yarn build --configuration production --build-optimizer true --aot true
なおAngularのビルドを細かいビルドオプションは
angular.json
ng buind
ビルド後の生成されたリソースファイルは
dist
プロダクトビルド後のAngular SPAにCORS対応のプロキシルートを設定する
サーバーサイドの実行環境にはNode.jsとExpressを利用します。
またExpressサーバーからのプロキシ接続の方法はいくつかあるようですが、今回はプロキシルートのためのミドルウェアとして
http-proxy-middleware
$ yarn add express http-proxy-middleware
AngularプロジェクトのルートにExpress用の
static.js
const express = require('express');
const path = require("path");
const { createProxyMiddleware } = require('http-proxy-middleware');
const server = express();
//👇ビルド済みのAngularアプリを出力したフォルダを指定
let distFolder = express.static(path.join(__dirname, "dist"));
server.set('view engine', 'html');
server.set('views', distFolder);
server.use(express.static(distFolder));
//👇各プロキシルートを定義していく
server.use('/hoge', createProxyMiddleware({
target: 'http://localhost:23456',
changeOrigin: false
}));
server.use('/piyo', createProxyMiddleware({
target: 'http://192.168.1.123:54321',
changeOrigin: true,
pathRewrite: {
[`^/piyo`]: 'http://192.168.1.123:54321/dev/v1',
}
}));
server.use('/fuga', createProxyMiddleware({
target: 'http://far-remote-guest.co.jp:67890',
changeOrigin: true,
pathRewrite: {
[`^/fuga`]: 'http://far-remote-guest.co.jp:67890/prod/api/v2',
}
}));
//👇その他のプロキシルート以外の通常パスはindex.htmlにアクセスさせる
server.get('*', (req, res) => {
console.log(req.originalUrl);
res.render('index');
});
const PORT = 12345;
const HOST = 'localhost';
server.listen(PORT, HOST, () => {
console.log(`Starting at http://${HOST}:${PORT}`);
});
Expressの実装を見られてピンときた方もいると思いますが、
むしろExpressのプロキシ機能を設定するミドルウェア・
http-proxy-middleware
ということで、
createProxyMiddleware
さらに細かいプロキシ制御が必要な場合には、
以上の準備が出来たらnodeからサーバー起動することができます。
$ node static.js
CORSアクセスが出来ていれば無事Expressでプロキシルートが機能しているはずです。
まとめ
前回に引き続き、Angularアプリ開発でプロキシルートを利用するための概論第二段をお届けしました。
今回のケースではNode.jsをインストールしたローカルマシーンをWebサーバー機として利用したことを念頭においていましたが、AWSやさくらのVPSなどのNodeランタイムの起動できるリモートレンタルサーバーなどでも問題なくプロキシ機能が利用できると思います。
Expressのプロキシルート操作を覚えておくと色々と応用の幅も広がりますので、是非ともご自分で試されてください。
参考サイト
記事を書いた人
ナンデモ系エンジニア
主にAngularでフロントエンド開発することが多いです。 開発環境はLinuxメインで進めているので、シェルコマンドも多用しております。 コツコツとプログラミングするのが好きな人間です。
カテゴリー