特定のリクエストをクラウド関数にルーティングするために、Firebase-hosting 内で書き換えルールを構成するにはどうすればよいでしょうか? 質問する

特定のリクエストをクラウド関数にルーティングするために、Firebase-hosting 内で書き換えルールを構成するにはどうすればよいでしょうか? 質問する

私は、Polymer 2.0 と Polymerfire を使用して構築した PWA を Web アプリケーションとして持っています。クラウド機能 (マイクロサービス) として機能する Express アプリも持っています。例:exports.register=functions.https.onRequest(app);

上記のアプリに/fns/register、マップと書き換えルールを追加する方法を説明します。/fns/verifyregister

firebase.jsoncloudfunction マイクロサービス プロジェクトでファイルを更新しましたが、実行するとfirebase deploy --only functions:register、ホスティング構成をデプロイするためのパブリック フォルダーがないというメッセージが表示されます。

{
    "hosting": {
        "rewrites": [{
            "source": "/fns/**", "function": "register"
        }]
    }    
}

元の Web アプリケーションで書き換えルールを維持することは 1 つの選択肢ですが、それでも、私見では理想的ではありません。元の Web アプリケーションでそれを実行する必要がある場合、私もそれを試しましたが、できませんでした。以下は、firebase.json元の Web アプリケーションで更新したものです。

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "build/default/public",
    "rewrites": [
      {
        "source": "/fns/**",
        "function": "register"
      },
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

ベストアンサー1

すべてのリソース (ホスティング、関数、データベース) に対して 1 つのプロジェクトのみを維持するのが理想的であり、Firebase プロジェクトを管理する正しい方法だと思います。

ホスティング サービスの 1 つのパラメータ (書き換え) だけを変更しようとしていますが、これは正しく動作しません。firebase.json をデプロイすると、他のすべての構成が上書きされます。したがって、エラーが発生するのは、Firebase が最後の構成ファイルを調べて更新する違いを確認せず、最後の構成ファイルをすべて上書きしようとしてエラーが発生するためです。これは、「public」がホスティングの必須パラメータであるためです。

/fns/register説明したとおり、Firebase がに書き換えられることを期待しています/registerが、これは起こりません。関数は「完全な」 URL を受け取ります/fns/register

最善の方法は、ルート ルートを作成することだと思います。

var functions = require('firebase-functions');
var express = require('express');

var app = express();
var router = express.Router();

router.post('/register', registerFunction);
router.post('/verify', verifyFunction);

app.use('/fns', router);

exports.fns = functions.https.onRequest(app);

そして、すべての関数をfns関数に書き換えます。

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "build/default/public",
    "rewrites": [
      {
        "source": "/fns/**",
        "function": "fns"
      },
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  }
}

これで、 を使用https://<your-project-id>.firebaseapp.com/fns/registerして登録機能にアクセスし、 を使用https://<your-project-id>.firebaseapp.com/fns/verifyして検証機能にアクセスできるようになります。

おすすめ記事