F# Saturn Framework:'get' 和 'forward' 有什么区别?
F# Saturn Framework: what is the difference between 'get' and 'forward'?
例如路由器计算表达式中的以下代码
get "/time" (warbler (fun _ -> System.DateTime.Now.ToString("HH:mm:ss") |> sprintf "Time now is %s" |> text))
好像和
有完全一样的效果
forward "/time" (warbler (fun _ -> System.DateTime.Now.ToString("HH:mm:ss") |> sprintf "Time now is %s" |> text))
在这两种情况下,只要客户端导航到 /time
,就会显示当前时间。
在什么情况下会有所不同?
您可以向 forward
提供任何 HttpHandler
,因此您看到这种行为并不让我感到惊讶。 forward
真正有用的地方是将整个子 routers
嵌套在某个路径根下。在这种情况下,转发确保子路径下的路由仅在路由的sub-portions上匹配。
例如,采用此设置:
let routerA = router {
get "/foo" (text "hi")
}
let routerB = router {
forward "/hi" routerA
}
在这种情况下,routerA get 方法的完整路径将是 /hi/foo
,而不是 /foo
。
例如路由器计算表达式中的以下代码
get "/time" (warbler (fun _ -> System.DateTime.Now.ToString("HH:mm:ss") |> sprintf "Time now is %s" |> text))
好像和
有完全一样的效果forward "/time" (warbler (fun _ -> System.DateTime.Now.ToString("HH:mm:ss") |> sprintf "Time now is %s" |> text))
在这两种情况下,只要客户端导航到 /time
,就会显示当前时间。
在什么情况下会有所不同?
您可以向 forward
提供任何 HttpHandler
,因此您看到这种行为并不让我感到惊讶。 forward
真正有用的地方是将整个子 routers
嵌套在某个路径根下。在这种情况下,转发确保子路径下的路由仅在路由的sub-portions上匹配。
例如,采用此设置:
let routerA = router {
get "/foo" (text "hi")
}
let routerB = router {
forward "/hi" routerA
}
在这种情况下,routerA get 方法的完整路径将是 /hi/foo
,而不是 /foo
。