首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用指向同一实体的多个路由配置yesod?

如何使用指向同一实体的多个路由配置yesod?
EN

Stack Overflow用户
提问于 2014-06-30 00:28:48
回答 1查看 260关注 0票数 3

我有两个处理程序,一个是GET,另一个是PUT:

代码语言:javascript
复制
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 

但我不知道该怎么做。如果我这么做:

代码语言:javascript
复制
/hotspot/#HotspotId HotspotR GET PUT

它抱怨PUT处理程序有错误的通透性:

代码语言:javascript
复制
  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

但如果我宣布另一条路线:

代码语言:javascript
复制
/hotspot/#HotspotId HotspotR GET 
/hotspot HotspotR PUT 

它抱怨说我有一条重复的路线:

代码语言:javascript
复制
/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
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-30 03:39:32

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

确保路线的名称不同。

代码语言:javascript
复制
/hotspots/           HotspotsR PUT
/hotspots/#HotspotId HotspotR  GET

然后相应修改您的put资源。

代码语言:javascript
复制
putHotspotsR :: Handler ()
putHotspotsR = do { ... }

这将使您能够在今后做以下工作。

代码语言:javascript
复制
/hotspots/           HotspotsR GET PUT   -- list all hotspots, insert a hotspot
/hotspots/#HotspotId HotspotR  GET PATCH -- Get a hotspot, update a hotspot.
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24481517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档