Не удается запустить клиент Javascript WebSharper, размещенный на Suave - PullRequest
1 голос
/ 08 мая 2019

Я пробую пример фрагмента под названием «Добавление функциональности на стороне клиента» со следующей страницы:

https://developers.websharper.com/docs/v4.x/fs/overview

Это выглядит немного устаревшим и не компилируется как естьТаким образом, основываясь на исходном репозитории, из которого был извлечен этот код, это то, что у меня есть сейчас.

namespace TestSuaveWs

open WebSharper
open WebSharper.Sitelets
open WebSharper.UI
open WebSharper.UI.Html
open WebSharper.UI.Client

module Server =

    [<Rpc>]
    let DoWork (s: string) = 
        async {
            return System.String(List.ofSeq s |> List.rev |> Array.ofList)
        }

[<JavaScript>]
module Client =

    open WebSharper.JavaScript
    open WebSharper.Html.Client


    let Main () =
        let input = Input [ Attr.Value "" ]
        let output = H1 []
        Div [
            input
            Button [ Text "Send" ]
            |>! OnClick (fun _ _ ->
                    async {
                        let! data = Server.DoWork input.Value
                        output.Text <- data
                    }
                    |> Async.Start
            )
            HR []
            H4 [ Class "text-muted" ] -- Text "The server responded:"
            Div [ Class "jumbotron" ] -< [ output ]
        ]

module TheSite =

    open WebSharper.UI.Server

    [<Website>]
    let MySite =
        Application.SinglePage (fun ctx ->
            Content.Page(
                Body = [
                    h1 [] [ text "Say Hi to the server" ]
                    div [] [ client <@ Client.Main() @> ]
                ]
            )
        )

    open global.Suave
    open Suave.Web
    open WebSharper.Suave

    let webPart = WebSharperAdapter.ToWebPart(MySite, RootDirectory="../..")

Тогда есть основная программа.

namespace TestSuaveWs

module Main =

    open System
    open System.Threading
    open Suave

    [<EntryPoint>]
    let main argv =
        let cts = new CancellationTokenSource()
        let conf = { defaultConfig with cancellationToken = cts.Token }
        let listening, server = startWebServerAsync conf TheSite.webPart
        Async.Start(server, cts.Token)
        printfn "Make requests now"
        Console.ReadKey true |> ignore
        cts.Cancel()
        0

Программа запускается, иЯ вижу текст «Скажи привет серверу» на localhost: 8080, но под этим текстом ничего нет.Рисунок на странице с примером показывает, как это должно выглядеть.Там должно быть поле для ввода текста, кнопка и текст ответа.

Когда я открываю Инструменты разработчика в моем браузере Chrome, я вижу, что есть куча похожих сообщений, отличающихся только именем файла javascript., что говорит: «Не удалось загрузить ресурс: сервер ответил со статусом 404 WebSharper.Main.min.js: 1 (не найдено)»

В папке bin \ Debug нет файлов * .js,Я работаю в VS 2019 с .NET Framework 4.7.1.

Чего мне не хватает?

1 Ответ

1 голос
/ 08 мая 2019

Я не знал, что этот самый пример был доступен в виде шаблона с именем "Сайт, размещенный на WebSharper 4 Suave", который я нашел только после загрузки и установки WebSharper vsix. Этот шаблон ускорил проект, делая именно то, что я пытался достичь. Вот и ответ. Хотелось бы, чтобы на это было указано на странице документации.

...