Пользовательский динамический ответ с Suave? - PullRequest
0 голосов
/ 31 декабря 2018

Я хочу построить простой счетчик с помощью Suave.

[<EntryPoint>]
let main argv =

  let mutable counter = 0;

  let app =
    choose
      [
        GET
        >=> choose
          [
            path "/" >=> OK "Hello, world. ";
            path "/count" >=> OK (string counter)
          ]
        POST
        >=> choose
          [
            path "/increment"
            >=> (fun context -> async {
              counter <- counter + 1
              return Some context
            })
          ]
      ]

  startWebServer defaultConfig app
  0

Однако, с моим текущим решением, счет на /count никогда не обновляется.

Я думаю, это потому, что WebPart вычисляется при запуске приложения, а не для каждого запроса.

Каков наилучший способ добиться этого в Суаве?

1 Ответ

0 голосов
/ 31 декабря 2018

Вы правы в предположении, что Webpart s являются значениями, поэтому вычисляются один раз.(См. this ).

Вам нужно использовать замыкание, чтобы получить то, что вы хотите:

path "/count" >=> (fun ctx ->
    async {
        let c = counter in return! OK (string c) ctx
    })
...