Saturn 路由器 - getf 和 get 的功能相同吗?
Saturn Router - same function for getf and get?
应该是个简单的问题,但我找不到 API 详细说明如何执行此操作的文档。
我有这样的控制器功能
let loadScreen (ctx: HttpContext) (number: int) : HttpHandler = htmlString "etc"
以及定义两个使用该功能的路由的路由器。将默认值 0 传递给 number
参数。另一个允许用户指定一个数字
let PageRouter = router {
(* Works fine: *)
get "/order" (warbler (fun (_, ctx) -> PageController.loadScreen ctx 0))
(* Does not compile: *)
getf "/order/%i" (fun number func ctx -> PageController.loadScreen ctx number)
}
这给出了错误
This expression was expected to have type 'HttpFuncResult' but here has type 'HttpFunc -> 'a -> HttpFuncResult'
我知道这是一个简单的缺失,但不知道是什么。
干杯
get
组合器需要类型为 HttpHandler
的第二个参数。这是你的代码:
get "/order" (warbler (fun (_, ctx) -> PageController.loadScreen ctx 0))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/
This is an HttpHandler value
另一方面,getf
需要一个不同的第二个参数。它需要一个以 int
作为参数并以 returns 作为结果的 HttpHandler
的函数。
所以只需将 fun number ->
贴在现有的 HttpHandler
前面,瞧:
getf "/order/%i" (fun number ->
(warbler (fun (_, ctx) -> PageController.loadScreen ctx number))
)
应该是个简单的问题,但我找不到 API 详细说明如何执行此操作的文档。
我有这样的控制器功能
let loadScreen (ctx: HttpContext) (number: int) : HttpHandler = htmlString "etc"
以及定义两个使用该功能的路由的路由器。将默认值 0 传递给 number
参数。另一个允许用户指定一个数字
let PageRouter = router {
(* Works fine: *)
get "/order" (warbler (fun (_, ctx) -> PageController.loadScreen ctx 0))
(* Does not compile: *)
getf "/order/%i" (fun number func ctx -> PageController.loadScreen ctx number)
}
这给出了错误
This expression was expected to have type 'HttpFuncResult' but here has type 'HttpFunc -> 'a -> HttpFuncResult'
我知道这是一个简单的缺失,但不知道是什么。
干杯
get
组合器需要类型为 HttpHandler
的第二个参数。这是你的代码:
get "/order" (warbler (fun (_, ctx) -> PageController.loadScreen ctx 0))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/
This is an HttpHandler value
另一方面,getf
需要一个不同的第二个参数。它需要一个以 int
作为参数并以 returns 作为结果的 HttpHandler
的函数。
所以只需将 fun number ->
贴在现有的 HttpHandler
前面,瞧:
getf "/order/%i" (fun number ->
(warbler (fun (_, ctx) -> PageController.loadScreen ctx number))
)