我正在使用Firebase开发博客应用程序。我在这个项目上使用带有ejs的express。
问题-当我使用模拟器运行项目时,该项目运行正常,但是在Firebase的托管上无法正常工作。
我尝试更改代码并多次重新部署所有文件。该功能在firebase的“功能”标签中可见,打开页面时不会记录任何错误。
我已经检查了以下内容->
1) Firebase功能SDK,npm模块和CLI已更新为最新版本。
// >>package.json<<
{
"name": "functions",
"description": "Cloud Functions for Firebase",
"scripts": {
"serve": "firebase emulators:start --only functions",
"shell": "firebase functions:shell",
"start": "npm run shell",
"deploy": "firebase deploy --only functions",
"logs": "firebase functions:log"
},
"engines": {
"node": "10"
},
"dependencies": {
"ejs": "^3.1.3",
"express": "^4.17.1",
"firebase-admin": "^8.10.0",
"firebase-functions": "^3.7.0"
},
"devDependencies": {
"firebase-functions-test": "^0.2.0"
},
"private": true
}
2)该项目正在节点10上运行。
3)我已经在firebase.json中添加了对函数的重写
//>>firebase.json<<
"firestore": {
"rules": "firestore.rules",
"indexes": "firestore.indexes.json"
},
"hosting": {
"public": "public",
"ignore": [
"firebase.json",
"**/.*",
"**/node_modules/**"
],
"rewrites": [ {
"source": "**",
"function": "app"
} ]
},
4)尝试了端口号,并交叉检查了其他必要配置。
5)我的项目已链接到拥有有效付款帐户的Google Cloud。
6)在Firebase模拟器中进行本地测试时效果很好。
这是我的职责
// >>index.js<<
const functions = require('firebase-functions');
const express = require('express');
const app = express(); // express initialize
//firestore
const admin = require('firebase-admin');
admin.initializeApp();
const db = admin.firestore();
app.listen(443); // listen for requests
// register view engine
app.set('view engine', 'ejs');
app.set('views', './views');
// middleware & static files
app.use(express.static('stats'));
// HANDLING REQUESTS
app.get('/', (req, res) => {
res.render('index', { title: "Blog by Zeal For Good" });
})
app.get('/index', (req, res) => {
res.redirect('/');
})
app.use((req, res) => {
res.status(404).render('404', { title: '404' });
});
exports.app = functions.https.onRequest(app);
我打开网站(https://zealforgood-blog.web.app/)->
时收到此消息
答案 0 :(得分:1)
在“功能”文件夹中安装Express。
在“功能”文件夹中安装ExpressJ所需的所有模块。
带云功能的Firebase需要在ExpressJs中运行的“ Cors”模块。安装它。
系统在项目的基础文件夹上需要一个“公用”文件夹,在“功能”文件夹上需要另一个“公用”文件夹。
之后,在项目的基本文件夹和“功能”文件夹中运行“ npm install”
删除Firebase为“默认”生成的“公用”文件夹中的“ index.html”和“ 404.html”
将您的文件.html更改为.ejs;
像这样调整项目:
//在firebase.json中使用://
"source": "/**",
//在index.js中://
const cors = require('cors');
...
const app = express();
...
// set view engine setup EJS
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'ejs');
// set this line below too
app.engine('ejs', require('ejs').__express);
app.use(cors({ origin: true }));
注意:下面的这一行是日语站点的副本,该副本在Cloud Functions(https://qiita.com/kingpanda/items/aa9bdef2706857720058)上进行EJS渲染。
app.engine('ejs', require('ejs').__express);
为我工作!
祝你好运!