Je développe un système Web en utilisant l'hébergement Firebase + les fonctions. Malgré la spécification des règles de réécriture sur firebase.json, une partie du routage ne fonctionne pas.
https://myurl/ -> public/index.html is shown.(not handled on node.js) https://myurl/ -> handled on node.js
Ceci est mon firebase.json
router.get('/', function(req, res, next) { res.render('index'); }); router.get('/subdir', function(req, res, next) { res.render('sub'); });
Et voici le code node.js.
"rewrites": [{ "source": "**", "function": "app" }],
résultat
root/ ãâ functions/ ãâ âindex.js ãâ âroutes/ ãâ â â index.js ãâ âviews/ ãâ â index.jade ãâ â sub.jade ãâ public/ âindex.html // this is created by default. I don't want to use this.
Savez-vous comment gérer la demande de chemin racine avec node.js sur l'hébergement Firebase. p >
3 Réponses :
Voir https://firebase.google.com/docs/hosting/ full-config # accommodation_priority_order .
Ordre de priorité des réponses d'hébergement
Les différentes options de configuration de Firebase Hosting décrites sur cette page peuvent parfois se chevaucher. En cas de conflit, Hosting détermine sa réponse en utilisant l'ordre de priorité suivant:
- Espaces de noms réservés commençant par un segment de chemin / __ / *
- Redirections configurées
- Contenu statique correspondant exactement
- Réécritures configurées
- Page 404 personnalisée
- Page 404 par défaut
Le contenu statique de correspondance exacte est de priorité élevée par rapport aux réécritures configurées.
Donc, https: // myurl /
récupère le contenu statique /index.html
.
Pouvez-vous essayer de supprimer public / index.html?
J'ai essayé. Je peux réécrire.
Voir https://github.com/zkohi/firebase-hosting- using-functions-samples .
Et vous devriez vérifier https://firebase.google.com/docs/hosting/functions .
Cela a fonctionné en essayant à nouveau. Je ne sais pas pourquoi le résultat est différent de la dernière fois, mais cela a quand même fonctionné.
dummyApiFolder
"hosting": { "target": "api", "public": "dummyApiFolder", "rewrites": [ { "source": "**", "function": "bla" } ] }
exports.bla = functions.https.onRequest(async (req, res) => { res.send("server bla"); });
3.1. La cible
n'est nécessaire que si vous l'avez configurée dans votre fichier .firebaserc
3.2. "public": "dummyApiFolder",
est nécessaire. Sinon, la CLI n'autorisera pas le déploiement.
Maintenant, toutes les requêtes doivent être transmises à bla
.
La raison pour laquelle je ' m conseillant de commencer avec une simple fonction cloud est, express
peut être configuré de manière incorrecte. Cela peut également vous donner une erreur, mais vous finissez par ne pas savoir s'il s'agit d'un problème Firebase ou d'un problème de code!
C'est simple! Renommez simplement le fichier index.html
dans le répertoire public en un autre nom. Aussi, juste au cas où: dans le fichier firebase.json
, modifiez la valeur de la propriété public
de public
à .