首页 > 解决方案 > 如何使用通用路由并将它们“挂载”到更大的服务应用程序中?

问题描述

概念

从 Rails 世界借用了“mount”。这是我在概念上尝试做的事情:

细节

以下是具体情况:

我在库中有一堆odd-jobs看起来像这样的仆人路线:

data Routes route = Routes
  { rFilterResults :: route :- QueryParam "filters" Filter :> Get '[HTML] (Html ())
  , rStaticAssets :: route :- "assets" :> Raw
  , rEnqueue :: route :- "enqueue" :> Capture "jobId" JobId :> Post '[HTML] NoContent
  , rRunNow :: route :- "run" :> Capture "jobId" JobId :> Post '[HTML] NoContent
  , rCancel :: route :- "cancel" :> Capture "jobId" JobId :> Post '[HTML] NoContent
  , rRefreshJobTypes :: route :- "refresh-job-types" :> Post '[HTML] NoContent
  , rRefreshJobRunners :: route :- "refresh-job-runners" :> Post '[HTML] NoContent
  } deriving (Generic)

我有一个单独的OddJobs.Links模块,它使用该RecordWildCards技巧在顶级命名空间中获取一堆安全链接生成函数:

Routes{..} = allFieldLinks' absText :: Routes (AsLink Text)

absText :: Link -> Text
absText l = "/" <> (toS $ show $ linkURI l)

作业队列的 web-ui 生成的 HTML 使用这些顶级函数:

form_ [ action_ (Links.rCancel jobId), method_ "post" ] $ do

问题

标签: haskellservant

解决方案


推荐阅读