2017-02-09 200 views
2

這是一個比我更喜歡來這裏的問題比較簡單一些,但我一直在試圖找到一個答案,並且我絕對不能 -Google雲端平臺HTTP函數是否支持路由參數?

Google Cloud Platform HTTP函數支持路由參數,在這裏? http://expressjs.com/en/guide/routing.html#route-parameters

具體來說,我發現Google雲平臺HTTP函數似乎使用Express作爲基礎,但是我看到的所有函數都已經只是運行req和res參數,沒有其他任何示例。我可以訪問正文中的數據,但這不允許我從路由中提取參數,例如在傳遞給「/ users /:userId/books /:bookId」的請求中查找書籤ID。我看不到如何將它們填充到req.params中,而無法指定路徑的哪一部分與此處的名稱相對應。

我知道我總是可以用另一種方式傳遞它們,但這樣更清潔,更符合我們想要使用的設置,因此我希望儘可能使其工作。有沒有辦法做到這一點,我完全失蹤或根本不支持?

回答

1

我能夠聯繫到支持小組,這似乎是,支持這一點 - 您只需使用req.path即可拉出完整路徑,然後以某種方式解析它(I使用path-to-regexp

+0

當使用路由參數時,cli部署過程是什麼樣的? –

0

你可以嘗試modofun:https://modofun.js.org

它是基於請求路徑上的多個操作的路由器,並且還支持自動參數從路徑解析。

它將URL路徑解析爲操作名稱和參數列表,這些參數被填充到req.params中,與使用正則表達式時的Express相同。所以,你可以做這樣的事情:

var modofun = require('modofun') 

exports.bookstore = modofun(
    { 
    /** 
    * /users/:userId/:bookId 
    */ 
    users: (req, res) => { 
     var [userId, bookId] = req.params 
     // ... 
     res.json(data) 
    } 
    }, 
    { mode: 'reqres' } 
) 

或者,您也可以擴展到函數參數的參數,並用純職能的工作,像這樣:

var modofun = require('modofun') 

exports.bookstore = modofun(
    { 
    /** 
    * /users/:userId/:bookId 
    */ 
    users: (userId, bookId) => { 
     // ... 
     return data 
    } 
    }, 
    { mode: 'function' } 
) 

我做了一個谷歌雲功能部署我在生產中,主要是因爲我不需要Express的大型依賴關係,我想要更輕量級的東西。

但請記住,您還可以將Express與Google Cloud Functions一起使用。沒有什麼能阻止你用通常的路由匹配規則創建一個Express應用程序,然後將它作爲你的GCloud功能的導出傳遞。

希望有所幫助。