Firebase-部署时云功能未运行

时间:2020-07-13 07:55:41

标签: node.js firebase express google-cloud-functions firebase-hosting

我正在使用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/)->
时收到此消息 enter image description here

1 个答案:

答案 0 :(得分:1)

  1. 在“功能”文件夹中安装Express。

  2. 在“功能”文件夹中安装ExpressJ所需的所有模块。

  3. 带云功能的Firebase需要在ExpressJs中运行的“ Cors”模块。安装它。

  4. 系统在项目的基础文件夹上需要一个“公用”文件夹,在“功能”文件夹上需要另一个“公用”文件夹。

  5. 之后,在项目的基本文件夹和“功能”文件夹中运行“ npm install”

  6. 删除Firebase为“默认”生成的“公用”文件夹中的“ index.html”和“ 404.html”

  7. 将您的文件.html更改为.ejs;

  8. 像这样调整项目:

//在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);

为我工作!

祝你好运!