3
我有一個耶索德路線有兩個處理器 - 一個用於GET和一個用於PUT:我怎樣才能配置yesod與多個路線指向同一個實體?
getHotspotR :: Key Hotspot -> Handler Value
getHotspotR i = do
hotspot <- runDB $ get404 i
returnJson hotspot
putHotspotR :: Handler()
putHotspotR = do
hotspot <- requireJsonBody
hid <- runDB $ insert $ hotspot
sendResponseCreated $ HotspotR hid
但我不知道該怎麼對路由做。如果我這樣做:
/hotspot/#HotspotId HotspotR GET PUT
它抱怨說,PUT處理程序有錯誤airity:
Couldn't match expected type `Key Hotspot -> HandlerT App IO res0'
with actual type `HandlerT App IO()'
The function `putHotspotR' is applied to one argument,
but its type `Handler()' has none
但如果我宣佈另一條路線:
/hotspot/#HotspotId HotspotR GET
/hotspot HotspotR PUT
它抱怨,我已經得到了重複路線:
/hotspot/#HotspotId HotspotR GET
/hotspot HotspotR PUT
Foundation.hs:48:1:
Multiple declarations of `HotspotR'
Declared at: Foundation.hs:48:1
Foundation.hs:48:1
HTTP PUT必須是[冪(http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html),這意味着必須重新執行不會造成重複的項目,這是不是你的情況。如果對新項目使用PUT,則必須在表中爲它們提供相同的DB關鍵字屬性,替換可能存在的關鍵字(如果記錄存在相同的關鍵字,則SQL插入將觸發錯誤)。 –
也使用[Http PUT](http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.6)URI標識資源。 –