私は、Polymer 2.0 と Polymerfire を使用して構築した PWA を Web アプリケーションとして持っています。クラウド機能 (マイクロサービス) として機能する Express アプリも持っています。例:exports.register=functions.https.onRequest(app);
上記のアプリに/fns/register
、マップと書き換えルールを追加する方法を説明します。/fns/verify
register
firebase.json
cloudfunction マイクロサービス プロジェクトでファイルを更新しましたが、実行すると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
して検証機能にアクセスできるようになります。