"Cannot GET" Firebase Cloud Functions + Express 示例错误

"Cannot GET" Error on Firebase Cloud Functions + Express sample

我是 firebase 的新手,正在尝试使下面视频中的简单 Cloud Functions + Express 示例正常工作。
https://www.youtube.com/watch?v=LOeioOKUKI8

当我尝试从 http://localhost:5000/timestamp 提供我的 index.js 时,出现以下错误。

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://localhost:5000/timestamp 时它会显示我的时间戳。
有人知道为什么会这样吗?

在我这边,我尝试开发一个具有 firebase 云功能的 Rest API。我有同样的错误。如果我通过 'Firebase deploy' 推送我的代码 firebase 服务器,这就是我想要的 运行ning。但是当我通过 'firebase serve --only functions, hosting' 命令在我的本地服务器上 运行 时,总会出现像 Cannot GET 而不是 运行 这样的错误。我在这里尝试了你的代码。我找到了一个非常简单的解决方案,运行 在我这边。你能在本地试穿吗,

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

只需在您的路径前添加 *。

更新:

'firebase-tools' 已更新。如果您将 bug 版本从 6.9.2 更新到 6.10.0,问题已得到解决。

最新更新firebase-tools:

npm i -g firebase-tools

我遇到了和你一样的问题。我通过将 firebase-tools 恢复到 6.8.0 来修复它,问题就解决了!

npm install --global firebase-tools@6.8.0

至于参考:https://github.com/firebase/firebase-tools/issues/1280

对于一些新手,在部署之前开始使用 firebase emulators:start 在本地测试功能,因为这是新的 Firebase 模拟器套件的一部分。 firebase serve 现已弃用

对于最近来这里的人,如果您使用 firebase init 创建您的 firebase 函数,firebase emulators:start 是默认的启动方式。

添加*/当然是前进的方式之一。

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 在 app 上导出 api,(export.app).

您可以从此处删除多余的 app

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

然后变成:

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

这将在 app/testapi/ 中可用。