Ошибка «Не удается получить» в облачных функциях Firebase + экспресс-образец

Я новичок в firebase и пытаюсь заставить простой пример Cloud Functions + Express из видео ниже работать.
https://thewikihow.com/video_LOeioOKUKI8

Когда я пытаюсь обслуживать свой index.js из http://локальный: 5000/отметка времени, я получаю следующую ошибку.

Cannot GET /{my-project-id}/us-central1/app/timestamp

В моем терминале я получаю следующий вывод.

⚠ Default "firebase-admin" instance created!
i functions: Finished "app" in ~1s
[hosting] Rewriting /timestamp to http://localhost:5001/{my-project-id}/us-central1/app for local Function app

Но если я развернусь, он будет работать так, как ожидалось, и покажет мою временную метку.

Мой текущий код ниже.

index.js

var admin = require("firebase-admin");
admin.initializeApp();

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

const app = express();

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

exports.app = functions.https.onRequest(app);

firebase.json

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

Если я перепишу часть своего index.js во что-то вроде

app.get('/{my-project-id}/us-central1/app/timestamp', (request, response) => {
  response.send(`${Date.now()}`);
});

он покажет мою временную метку, когда я получу доступ к http://локальный: 5000/отметка времени.
Кто-нибудь знает, почему это происходит?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
7
0
6 301
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Со своей стороны, я пытался разработать Rest API с облачными функциями Firebase. У меня такая же ошибка. Если я нажму свои кодовые серверы Firebase через «Развертывание Firebase», он запустит то, что я хочу. Но когда я запускаю на своем локальном сервере команду «firebase serve --only functions, hosting», всегда будет ошибка типа Cannot GET и не запуститься. Я пробовал ваш код и то же самое здесь. Я нашел смехотворно простое решение для этого и побежал на моей стороне. Не могли бы вы попробовать на месте,

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

Просто добавьте * перед вашим путем.

ОБНОВИТЬ :

'firebase-tools' был обновлен. Если вы обновите свою глючную версию с 6.9.2 до 6.10.0, проблема будет устранена.

Для обновления последних инструментов firebase:

npm i -g firebase-tools

Ваш ответ также был полезен в качестве обходного пути для решения проблемы с последними инструментами firebase. Но я сделаю ответ @Noncenzt принятым ответом, поскольку он не требует никаких изменений в моем производственном коде. Спасибо!

ysjn 16.05.2019 03:14

Спасибо за обновление! будет использовать последнюю версию firebase-tools :)

ysjn 22.05.2019 17:08

У меня та же проблема, измените '/my-path' на '*/my-path' для меня! Спасибо!

victorpacheco3107 09.09.2019 18:39

Я сталкиваюсь с той же проблемой, что и вы. И я исправляю это, возвращая firebase-tools к 6.8.0, и проблема решается!

npm install --global [email protected]

Что касается ссылки: https://github.com/firebase/firebase-tools/issues/1280

Здорово! Понижение моих инструментов firebase решило проблему! Я буду следить за проблемой, которую вы предоставили для будущего исправления в firebase-tools. Спасибо!

ysjn 16.05.2019 03:08

Для некоторых новичков начните использовать firebase emulators:start для локального тестирования функций перед развертыванием, так как это часть нового Firebase Emulator Suite. firebase serve устарела

Для тех, кто приходит сюда в последнее время, firebase emulators:start — это способ запуска по умолчанию, если вы используете firebase init для создания своих функций Firebase.

Добавление */, конечно же, является одним из способов продвижения вперед.

Причиной Cannot /GET /* может быть то, как firebase экспортирует API.

После создания API

app.get('/app/testapi', (req, res) => {
  res.send({ 'status': 0});
});

когда он экспортируется как exports.app = functions.https.onRequest(app); фактический API становится app/app/testapi, поскольку firebase экспортирует API в app, (export.app).

Убрать лишние app можно отсюда:

app.get('/app/testapi', (req, res) => {
  res.send({ 'status': 0});
});

который затем становится:

app.get('/testapi', (req, res) => {
  res.send({ 'status': 0});
});

Это будет доступно в app/testapi/.

Это сэкономило мне много времени, большое спасибо за то, что написали этот ответ.

Meme Composer 24.12.2021 08:32

Другие вопросы по теме