es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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

Tags:  ,

Answer

  1. Avatar for 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”:

    let loadScreen (ctx: HttpContext) (number: int) : HttpHandler = 
        html (htmlString "etc")
    

    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”.

Comments are closed.