如何在firebase宿主和函数中配置重写和映射前缀的动态路由路径



我启用了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);

公共/firebase.json

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

现在我的目标是一样的,但我想在路径前面加上"api",这样我就可以有上面列出的api路径。我试着先在https://mmydomain.com/api/generatorPerson使用下面的函数setup/config和firebase-config。它部署时没有错误,但我得到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);

公共/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。我的代码有什么问题?还是我的前缀做错了?

尝试

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

/api已经映射到快递应用

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

  1. 清除了带有任何注释工件的firebase.json
  2. 部署主机和功能
  3. 如果问题仍然存在,请等待几分钟或刷新API的http调用。之后它就会工作

最新更新