【问题标题】:How do I configure the rewrite and map prefixed dynamic route path in firebase hosting and functions?如何在 Firebase 托管和功能中配置重写和映射前缀动态路由路径?
【发布时间】:2018-12-21 00:38:31
【问题描述】:

我启用了 firebase 页面和功能。我想要一个如下的 api 路由:

  1. https://mmydomain.com/api/generatorPerson
  2. https://mmydomain.com/api/generateLead
  3. https://mmydomain.com/api/and_so_on

我确实遵循了 Firebase 团队 https://youtu.be/LOeioOKUKI8(动态节点应用程序)的指南,他在其中将路径 https://mmydomain.com/timestamp 映射或挂钩到他拥有的 firebase 函数“exports.app”/timestamp 表示路由路径。他的代码类似于下面的代码:

functions/index.json

const express = require('express');
const functions = require('firebase-functions');

const app = express();

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

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

public/firebase.json

{
  "hosting": {
    "public": "public",
    "rewrites": [
      {
        "source": "/timestamp",
        "function": "app"
      }
    ]
  }
}

现在我的目标有点相同,但我想在路径前加上“api”,这样我就可以拥有上面列出的 api 路径。我尝试使用下面的函数 setup/config 和 firebase config 首先工作 https://mmydomain.com/api/generatorPerson。它部署没有错误,但我收到 404 错误。

functions/index.json

const faker = require('faker');
const express = require('express');
const functions = require('firebase-functions');
const admin = require('firebase-admin');
admin.initializeApp();

const app = express();

app.get('/api/generatePerson', (request, response) =>{
    let randomName = faker.name.findName();
    let randomEmail = faker.internet.email();
    let randomPhoneNumber = faker.phone.phoneNumber();
    let randomBirthDay = faker.date.past();
    let randomAddress = faker.address.streetAddress();
    let randomJobTitle = faker.name.jobTitle();
    let randomJobDescription = faker.name.jobDescriptor();
    let randomCompany = faker.company.companyName();

    let person = {
        name: randomName,
        email: randomEmail,
        phoneNumber: randomPhoneNumber,
        birthday: randomBirthDay,
        address: randomAddress,
        work: {
            jobTitle: randomJobTitle,
            jobDescription: randomJobDescription,
            company: randomCompany
        }
    };

    response.send(person);
});

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

public/firebase.json

{
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "/api/**",
        "function": "app"
      }
    ]
  },
  "functions": {
    "predeploy": [
      "npm --prefix \"%RESOURCE_DIR%\" run lint"
    ]
  }
}

我使用模式/api/**,因为我希望所有子路由都以api为前缀并将它们映射到exports.app。我的代码有什么问题?还是我做错了前缀?

【问题讨论】:

  • 请编辑您的问题以准确演示哪个请求 URL 应该映射到哪个函数。就您现在提出的问题而言,很难确切地说出是什么没有按您期望的方式工作。
  • @Doug Stevenson 您好,感谢您的回复。对不起,我没有清楚地表达我的问题。我编辑了问题和内容,希望它能澄清问题。
  • 请更具体。您现在提供的是 url 路径,而不是完整的 URL 的样子。您不必放弃您的项目名称或任何其他信息,但这将有助于我们更准确地了解您想要做什么。
  • 或者,换句话说,如果我想重现您的情况,我可以采取哪些具体步骤来查看您所看到的内容?

标签: javascript node.js firebase google-cloud-functions firebase-hosting


【解决方案1】:

试试

app.get('/generatePerson', (request, response) =>{

/api 已经映射到 express 应用

【讨论】:

  • 您好,感谢您的回复我确实收到了一个错误:Cannot GET /api/generatePerson
【解决方案2】:

我设法通过以下方式解决了问题:

  1. 使用任何注释工件清理了 firebase.json。
  2. 同时部署托管和功能。
  3. 如果问题仍然存在,请等待几分钟或刷新 API 的 http 调用。之后它将起作用。

【讨论】:

    猜你喜欢
    • 2017-10-30
    • 1970-01-01
    • 2014-05-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-27
    • 2017-12-11
    相关资源
    最近更新 更多