Firebase - облачные функции не работают при развертывании - PullRequest
0 голосов
/ 13 июля 2020

Я разрабатываю приложение для блога с помощью firebase. Я использую express с e js в этом проекте.

ПРОБЛЕМА. Когда я запускаю их с помощью эмулятора, проект работает отлично, но не работает на хостинге firebase.

Я много раз пробовал изменить свой код и повторно развернуть все файлы. Эта функция отображается на вкладке «функции» в firebase и не регистрирует никаких ошибок, когда я открываю страницу.

Я проверил следующее ->

1 ) SDK функций Firebase, модули npm и интерфейс командной строки обновлены до последней версии.

// >>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, в котором есть активная платежная учетная запись.
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/) ->
введите описание изображения здесь

1 Ответ

1 голос
/ 26 августа 2020
  1. Установить Express в папку 'functions'.

  2. Установить все необходимые модули из ExpressJs в папку 'functions' .

  3. Firebase с облачными функциями требуется модуль Cors, работающий в ExpressJs. Установите его.

  4. Системе требуется папка publi c в базовой папке проекта, другая папка publi c в папке functions.

  5. После запустите 'npm install' в базовой папке проекта и в папке 'fuctions'

  6. удалите 'index. html' и ' 404. html 'в папках' publi c ', созданных для Default с помощью Firebase

  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 }));

Примечание. Эта строка ниже является копией с японского сайта, который выполняет рендеринг E JS в облачных функциях (https://qiita.com/kingpanda/items/aa9bdef2706857720058).

app.engine('ejs', require('ejs').__express);

У меня работает!

Удачи!

...