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