Почему Firebase не запускает папку «мои функции» (для приложения узла)?

#node.js #firebase #express #google-cloud-functions #firebase-cli

#node.js #firebase #экспресс #google-cloud-функции #firebase-cli

Вопрос:

Я пытаюсь разместить приложение узла на firebase

Проблема в том, что время ожидания истекает, когда я запускаю действительно базовую функцию отметки времени.

Вот файл firebase.json:

 {
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "public",
    "rewrites": [{
      "source": "/timestamp",
      "function": "app"
    }],
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}  

Вот файл 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"
  },
  "main": "index.js",
  "dependencies": {
    "dotenv": "^8.2.0",
    "express": "^4.17.1",
    "firebase-admin": "^8.10.0",
    "firebase-functions": "^3.6.1",
    "jquery": "^3.5.1",
    "node": "^14.8.0",
    "nodemailer": "^6.4.11",
    "nodemailer-mailgun-transport": "^2.0.0",
    "nodemon": "^2.0.4"
  },
  "devDependencies": {
    "firebase-functions-test": "^0.2.0"
  },
  "private": true
}  

Вот index.js в папке «Функции»:

 const functions = require('firebase-functions');
const express = require('express');

const app = express();
app.get('/timestamp', (request, response)=>{
    response.send(`${Date.now()}`);
});

// // Create and Deploy Your First Cloud Functions
// // https://firebase.google.com/docs/functions/write-firebase-functions
exports.helloWorld = functions.https.onRequest(app);  

И вот журнал терминала, когда я запускаю firebase локально:

 Andrews-iMac:functions test$ firebase serve --only functions,hosting
⚠  Your requested "node" version "10" doesn't match your global version "12"
i  functions: Watching "/Users/test/Desktop/Git/Deep Technology/deep-technology/functions" for Cloud Functions...
i  hosting: Serving hosting files from: public
✔  hosting: Local server: http://localhost:5000
[hosting] Rewriting /timestamp to http://localhost:5001/deep-technology/us-central1/app for local Function app
✔  functions[helloWorld]: http function initialized (http://localhost:5001/deep-technology/us-central1/helloWorld).
i  hosting: 127.0.0.1 - - [18/Aug/2020:17:32:31  0000] "GET /timestamp HTTP/1.1" 504 - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"
[hosting] Rewriting /timestamp to http://localhost:5001/deep-technology/us-central1/app for local Function app
i  hosting: 127.0.0.1 - - [18/Aug/2020:17:33:50  0000] "GET /timestamp HTTP/1.1" - - "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.125 Safari/537.36"  

Вот скриншот, на котором я запускаю локальный хост (вы также можете увидеть структуру файла):

введите описание изображения здесь

Ответ №1:

Я не мог понять это, однако, ваши вопросы идеальны, и я смог легко воспроизвести это на своей стороне. После нескольких попыток я нашел это, но это очень маленькая ошибка, однако такие ошибки сложнее всего найти.

В представленном коде функция в hosting в firebase.json отличается от функции, экспортированной из index.js . Итак, есть 2 решения:

на firebase.json хостинге должно быть "function": "helloWorld"

или

в index.js должно быть: exports.app = functions.https.onRequest(app);

На моей стороне оба работают хорошо!

Ответ №2:

В моем случае я перешел к файлу firebase.json, который изначально был у меня как:

 {
    "database": {
        "rules": "database.rules.json"
    }
}
  

Я изменил его на:

 {
  "hosting": {
    "public": "public",
    "rewrites": [{
      "source": "**",
      "function": "app"
    }]
  }
}