web-dev-qa-db-ja.com

特定のリクエストをクラウド機能にルーティングするために、firebase-hosting内で書き換えルールを構成する方法は?

polymer 2.0とPolymerfireを使用して構築されたPWAであり、私のWebアプリケーションです。クラウド機能(マイクロサービス)として機能するエクスプレスアプリです。例:exports.register=functions.https.onRequest(app);

/fns/register/fns/verifyを上記のアプリregisterにマップする書き換えルールを追加する方法。

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

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

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

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

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

ホスティングサービスの1つのパラメーター(書き換え)のみを変更しようとしていますが、それは機能しません。 firebase.jsonをデプロイすると、他のすべての構成が上書きされます。だから、あなたが手に入れたエラーは、Firebaseが最後の設定ファイルを見て更新の違いをチェックしないためです。「public」はホスティングに必要なパラメータなので、すべての最後の設定ファイルを上書きしてエラーを取得しようとします。

これは、Firebaseが/fns/register/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を使用して確認機能にアクセスできます。

28
Marcos V.

この質問はすでにここで回答されています Firebase Hosting with dynamic cloud functions rewrites

SPAを1つのプロジェクトに、マイクロサービスを別のプロジェクトに保持するのが最善ですが、@ Marcos Vはルート関数の使用について正しいことを認めます

0
martosoler