【发布时间】:2021-09-21 13:31:54
【问题描述】:
我在 Firebase 上托管一个使用 cloud functions 和 hosting 的应用程序。前者以包含 API 的 NodeJS express 应用程序的形式提供动态内容,后者为我的 express 应用程序提供 css、javascript 等静态内容。
(Here 是一个很好的教程来设置 express 和 firebase 托管)
通常在具有standard structure 设置的快速应用程序中,会创建一些文件夹,例如bin、routes、views 和public。其中大部分都可以轻松复制到您的 Firebase 应用中。
问题:
问题是同时使用 hosting 和 functions。
使用以下index.js(以app.js 表示),我可以使用firebase 模拟器(函数、托管等)在本地成功查看和模拟我的应用程序
const functions = require("firebase-functions");
const admin = require("firebase-admin");
const express = require("express");
const engines = require("consolidate");
...
admin.initializeApp({
credential: admin.credential.applicationDefault(),
databaseURL: "https://....firebaseio.com"
});
// app routes
const usersRouter = require('./app/users');
...
const app = express();
// #Working locally only - for deplopyment, all static linkes must load resources as [hosting-domain.app.com]/css/styles.css
app.use("/public", express.static(path.join(__dirname,'../public')));
app.use(flash());
app.engine('pug', require('pug').__express)
app.set('views', __dirname + '/views');
app.set('view engine', 'pug');
// Use the createSession endpoint for login & verify each session
app.use(authenticate);
...
app.use('/user', usersRouter);
app.get('/', (req, res) => {
return res.redirect("/user/login");
});
app.get('*', (req, res, next) => {
res.render("404");
})
exports.app = functions.https.onRequest(app);
// api routes
exports.api = require('./api/api.js');
如何在使用 firebase 函数处理动态内容的同时成功地在 firebase 主机上提供静态内容?
(答案如下)
【问题讨论】:
标签: node.js firebase express google-cloud-functions firebase-hosting