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/.
就我而言,我尝试开发具有 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)
| 归档时间: |
|
| 查看次数: |
5497 次 |
| 最近记录: |