Экспресс-маршруты и промежуточное по с помощью облачных функций firebase

Вопрос

Как использовать Express в облачных функциях Firebase?

Ожидания

Используя любой из URL-адресов, которые я установил, я ожидаю увидеть "Hello from Express on Firebase!" в журналах консоли.

Почему? Насколько я понимаю, "*" означает, что все запрошенные маршруты должны response.send("Hello from Express on Firebase!");

app.get("*", (_request, response) => {
  response.send("Hello from Express on Firebase!");
});

Проблема

Когда я использую https://us-central1-myapp.cloudfunctions.net/helloWorld, я получаю ожидаемый Hello from Firebase! в журналах. Стоит ли еще посмотреть "Hello from Express on Firebase!"?

Когда я использую https://us-central1-myapp.cloudfunctions.net/api, я получаю 404 error

The URL, https://us-central1-myapp.cloudfunctions.net/api is the issue. See why in the answer below.

Код

// Express
import express = require("express");
const app = express();
const cors = require("cors")({
  origin: "*"
});
app.use("*", cors);

// Firebase Functions SDK
import functions = require("firebase-functions");

app.get("*", (_request, response) => {
  response.send("Hello from Express on Firebase!");
});

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

exports.helloWorld = functions.https.onRequest((_request, response) => {
  response.send("Hello from Firebase!");
});

tl; dr

Примером того, что я надеюсь достичь, является здесь, но ни один из примеров кода у меня не работал. Я получаю 404 error с каждым.

Экспресс-документация здесь показывает аналогичный пример HelloWorld, но я не понимаю, как Firebase заменяет app.listen(3000, () => console.log('Example app listening on port 3000!')).

cors работает правильно в моем примере кода? Хотя я получаю ожидаемый ответ и журнал, консоль Chrome предупреждает: Cross-Origin Read Blocking (CORB) blocked cross-origin response https://appengine.google.com/_ah/lo....

У меня есть приложение Slack, которое обращается к этим URL-адресам (я тоже ударил их с помощью хрома). В конце концов, я хотел бы использовать промежуточное ПО Botkit в своих облачных функциях Google. Я еще не понял, как правильно настроить Express app.use() и app.get()

Я вижу использование firebase.json с параметрами hosting. Мой примерный проект не использует хостинг, и мне не нужен считать. Пример в этом Видео Firebase похож, но достаточно отличается.

Chadd 13.09.2018 23:02
1
1
1 156
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Отвечать

Я совершил простую ошибку, рассматривая /api как функцию, хотя на самом деле она является частью пути.

Используя этот URL с завершающим /

https://us-central1-myapp.cloudfunctions.net/api/

Я сейчас нажимаю на экспресс-маршрут и функцию.

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