2017-10-20 198 views
2

如何處理像/用戶/路徑:ID/用戶/:ID/HTTP中觸發火力地堡雲功能的訪問報告到PARAM ID?火力地堡雲功能路由

我不喜歡一個解決方案,因爲我的所有功能將是一個前綴/API的一部分:

const app = require('express')(); 
exports.api= functions.https.onRequest(app); 
app.get('/user/:uid/report', (req, res) => {}): 

但我需要類似的東西:

exports['/user/:uid/report'] = functions.https.onRequest((req, res) => { 
    // ... 
}); 

回答

1

您可以使用您的主機重寫來映射URL到這樣的功能

"rewrites": [ 
    { 
    "source": "/user/*/report", 
    "function": "myFunction" 
    } 
] 

但是,您必須處理自己的URL才能提取每個參數

+0

我不認爲這是行得通的。 –

+0

我的答案可行,您可以在網址中使用通配符,查看文檔https://firebase.google.com/docs/hosting/url-redirects-rewrites。 –

+0

對不起,我以前的粗魯答案,根據文檔的URL是glob表示法,所以你可以在其中添加*。這裏是我的api在firebase雲funcitons中實現的一個例子https://jsfiddle.net/1x4crn9t/ –

2

您可以在Firebase雲端函數的頂部使用Firebase託管來重寫URL以適應所需的路徑。這意味着你必須再次firebase init並添加主機,如果它尚未。

在項目firebase.json你必須添加一個function rewrite所有請求發送到託管/**運作api

{ 
    "hosting": { 
    "rewrites": [ 
     { 
     "source": "/**", 
     "function": "api" 
     } 
    ] 
    } 
} 

部署時,你會得到輸出託管URL。使用這個而不是你的函數URL。

現在,在Hosting功能前面,您必須能夠設置caching

+0

我不認爲這是好的解決方案,因爲最終我只有一個雲上的功能來配置超時和內存, 對? – iiylll

+0

這是正確的。但是在重寫主機時不能使用通配符,因此無法將通配路徑重定向到常規的https功能。這就是我們今天所擁有的一切。隨意提交描述您情況的功能請求:https://firebase.google.com/support/contact/bugs-features/ –