"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
对于一些新手,在部署之前开始使用 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/
中可用。
我是 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
对于一些新手,在部署之前开始使用 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/
中可用。