gpt4 book ai didi

haskell - 如何配置 yesod 具有指向同一实体的多个路由?

转载 作者:行者123 更新时间:2023-12-02 18:07:18 25 4
gpt4 key购买 nike

我有一个 yesod 路由,有两个处理程序 - 一个用于 GET,一个用于 PUT:

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 处理程序的空气性错误:

  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

最佳答案

从逻辑上讲,这些资源并不相同,即使它们操纵实体。 HotspotR 操纵单个热点。 HotspotsR 操纵热点集(例如,通过插入到该集中)。

确保路由的名称不同。

/hotspots/           HotspotsR PUT
/hotspots/#HotspotId HotspotR GET

然后相应地修改你的 put 资源。

putHotspotsR :: Handler ()
putHotspotsR = do { ... }

这也将使您将来能够执行以下操作。

/hotspots/           HotspotsR GET PUT   -- list all hotspots, insert a hotspot
/hotspots/#HotspotId HotspotR GET PATCH -- Get a hotspot, update a hotspot.

关于haskell - 如何配置 yesod 具有指向同一实体的多个路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24481517/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com