Enrutador Saturn – ¿misma función para “getf” y “get”?
Debería ser una pregunta sencilla, pero no puedo encontrar la documentación de la API que detalle cómo hacer esto.
Tengo una función de controlador así:
let loadScreen (ctx: HttpContext) (number: int) : HttpHandler = htmlString "etc"
Y un enrutador que define dos rutas que utilizan esa función. Una pasa un valor predeterminado de 0 al parámetro “number”. La otra permite que un usuario especifique un número.
let PageRouter = router {
(* Funciona bien: *)
get "/order" (warbler (fun (_, ctx) -> PageController.loadScreen ctx 0))
(* No compila: *)
getf "/order/%i" (fun number func ctx -> PageController.loadScreen ctx number)
}
Esto da el error:
Se esperaba que esta expresión tuviera el tipo 'HttpFuncResult', pero aquí tiene el tipo 'HttpFunc -> 'a -> HttpFuncResult'
Sé que es algo simple que falta, pero no puedo encontrar qué es.
Saludos
davy.ai
El mensaje de error sugiere que la función “loadScreen” no está devolviendo un tipo “HttpFuncResult”, que es lo que espera el enrutador.
Para solucionar esto, debes envolver el resultado del “htmlString” de la función “loadScreen” en una función “html”, que devuelve un “HttpFuncResult”.
Aquí hay una versión actualizada de la función “loadScreen”:
Ahora, la función “loadScreen” devuelve un tipo “HttpFuncResult” (específicamente, el resultado de llamar a la función “html” con el valor “htmlString”).
Con este cambio, el enrutador debería poder llamar correctamente a la función “loadScreen”.