Firebase Cloud Functions + Express 示例上的“无法获取”错误

ysj*_*sjn 6 node.js express firebase firebase-hosting google-cloud-functions

我是 firebase 的新手,并试图从下面的视频中制作简单的 Cloud Functions + Express 示例来工作。
https://www.youtube.com/watch?v=LOeioOKUKI8

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

无法获取 /{my-project-id}/us-central1/app/timestamp

在我的终端中,我得到以下输出。

? 创建了默认的“firebase-admin”实例!
i 函数:在 ~1秒内完成“应用程序”
[托管] 将 /timestamp 重写为http://localhost:5001/ {my-project-id}/us-central1/app 用于本地函数应用程序

但是如果我部署,它会按预期工作,并且会显示我的时间戳。

我当前的代码如下。

索引.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);
Run Code Online (Sandbox Code Playgroud)

firebase.json

{
  "hosting": {
    "public": "public",
    "rewrites": [{
      "source": "/timestamp",
      "function": "app"
    }],
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

如果我将 index.js 的一部分重写为类似的内容,

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

当我访问http://localhost:5000/timestamp时,它会显示我的时间戳
任何人都知道为什么会这样?

小智 7

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

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

原因Cannot /GET /*可能是 firebase 导出 api 的方式。

创建api后,

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

当它作为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});
});
Run Code Online (Sandbox Code Playgroud)

然后变成:

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

这将在app/testapi/.


Twi*_*ens 6

就我而言,我尝试开发具有 Firebase 云功能的 Rest API。我有同样的错误。如果我通过“Firebase deploy”推送我的代码 firebase 服务器,它正在运行我想要的。但是当我通过“firebase serve --only functions,hosting”命令在我的本地服务器上运行时,总会出现类似无法获取且无法运行的错误。我正在尝试您的代码,这里也是如此。我为此找到了一个非常简单的解决方案并站在我这边。可以在本地试一下吗

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

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

更新 :

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

要更新最新的 firebase-tools:

npm i -g firebase-tools
Run Code Online (Sandbox Code Playgroud)