Saturn Router - одна и та же функция для getf и 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'
Я знаю, что этого просто не хватает, но не могу понять, что именно.
Ваше здоровье
1 ответ
The
get
комбинатор ожидает второй параметр типа . Это в вашем коде:
get "/order" (warbler (fun (_, ctx) -> PageController.loadScreen ctx 0))
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
/
This is an HttpHandler value
getf
, с другой стороны, ожидает другой второй параметр. Он ожидает функцию, которая принимает
int
в качестве параметра и возвращает в качестве результата.
Так что просто придерживайся
fun number ->
перед вашим существующим
HttpHandler
, и вуаля:
getf "/order/%i" (fun number ->
(warbler (fun (_, ctx) -> PageController.loadScreen ctx number))
)