J'ai un PWA construit en utilisant polymer 2.0 et polymerfire et est mon application web. J'ai une application express agissant comme une fonction cloud (microservice). Exemple: exports.register=functions.https.onRequest(app);
Comment ajouter les règles de réécriture à la carte, dites /fns/register
et /fns/verify
à l'application ci-dessus register
.
J'ai mis à jour mon firebase.json
fichier dans le projet de microservice cloudfunction, mais lorsque j'exécute firebase deploy --only functions:register
il indique qu'il n'y a pas de dossier public pour déployer la configuration d'hébergement!
{
"hosting": {
"rewrites": [{
"source": "/fns/**", "function": "register"
}]
}
}
Le maintien des règles de réécriture dans l'application Web d'origine pourrait être une option, mais n'est pas idéal à mon humble avis. Si je dois le faire dans mon application Web d'origine, j'ai également essayé, mais je n'ai pas pu le faire. Voici ma mise à jour firebase.json
dans mon application Web d'origine:
{
"database": {
"rules": "database.rules.json"
},
"hosting": {
"public": "build/default/public",
"rewrites": [
{
"source": "/fns/**",
"function": "register"
},
{
"source": "**",
"destination": "/index.html"
}
]
}
}
Le maintien d'un seul projet pour toutes les ressources (hébergement, fonctions et base de données) est l'idéal, je pense que c'est la bonne façon de gérer les projets Firebase.
Vous essayez de modifier un seul paramètre (réécriture) du service d'hébergement, et ce n'est pas ainsi que cela fonctionne. Lorsque vous déployez firebase.json, toutes les autres configurations sont écrasées. Donc, l'erreur que vous avez obtenue est que Firebase ne regarde pas le dernier fichier de configuration et ne vérifie pas ce qui est différent à mettre à jour, il essaie simplement d'écraser tout le dernier fichier de configuration et d'obtenir une erreur car "public" est un paramètre requis pour l'hébergement.
Cela expliqué, vous vous attendez maintenant à ce que Firebase réécrit /fns/register
pour juste /register
, mais cela ne se produira pas. Votre fonction va recevoir l'url "complète" /fns/register
.
La meilleure façon, je pense, est de créer une route racine:
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);
Et réécrit toutes les fonctions dans la fonction fns
:
{
"database": {
"rules": "database.rules.json"
},
"hosting": {
"public": "build/default/public",
"rewrites": [
{
"source": "/fns/**",
"function": "fns"
},
{
"source": "**",
"destination": "/index.html"
}
]
}
}
Vous pouvez maintenant utiliser https://<your-project-id>.firebaseapp.com/fns/register
pour accéder à votre fonction d'enregistrement et https://<your-project-id>.firebaseapp.com/fns/verify
pour accéder à votre fonction de vérification.
Cette question est déjà répondue ici Hébergement Firebase avec des fonctions de cloud dynamique réécrit
Je suis d'accord avec vous qu'il est préférable de conserver le SPA dans un projet et le microservice dans un autre, mais @Marcos V a raison d'utiliser une fonction racine