Ich folgte entlang Programming Phoenix, aber mit Elm für mein Frontend, anstatt Javascript. Der zweite Teil dieses Buches beschreibt, wie man Websockets verwendet. Im laufenden Beispiel des Buchs erstellen Sie ein Authentifizierungstoken für die Clientseite, das zum Zeitpunkt der Verbindungsherstellung an Phoenix übergeben wird. Die Javascript-Klasse Socket
, die mit Phoenix geliefert wird, erlaubt das, aber es gibt keinen offensichtlichen Weg, es in Elm zu machen (ab 0.17 und dem Datum dieser Frage).Wie übergebe ich Verbindungszeit-Websocket-Parameter von Elm an Phoenix?
Antwort
Wie im Buch machen die Token Javascript sichtbar, indem es
window
befestigen.<script>window.auth_token = "<%= assigns[:auth_token] %>"</script>
In
web/static/js/app.js
, werden Sie Code haben, der Elm beginnt. Übergeben Sie das Token dort.const c4uDiv = document.querySelector('#c4u-target'); if (c4uDiv) { Elm.C4u.embed(c4uDiv, {authToken: window.auth_token}); }
- Auf der Elm Seite, werden Sie
programWithFlags
stattprogram
verwenden. Ihre
init
Funktion wird ein flags Argument nehmen. (Ich benutze die Navigation Bibliothek für einen Single-Seite-App, die ist, warum es einPageChoice
Argument als auch.)type alias Flags = { authToken : String } init : Flags -> MyNav.PageChoice -> (Model, Cmd Msg)
Innerhalb
init
, tack auf dem Token als Abfrage Paar URI. Beachten Sie, dass Sie uri-encode verwenden müssen, da das Token ungerade Zeichen enthält. Hier ist der grobe Weg, das zu tun. Hinweis: Ich verwende die elm-phoenix-socket-Bibliothek unten, aber die gleiche Hackerei würde mit anderen benötigt.let uri = "ws://localhost:4000/socket/websocket?auth_token=" ++ (Http.uriEncode flags.authToken) in uri |> Phoenix.Socket.init |> Phoenix.Socket.withDebug |> Phoenix.Socket.on "ping" "c4u" ReceiveMessage
ich hier durch einen Tweet von Brian, über Codierung von Elm. In diesem Fall gehe ich gerne mit JavaScript um. Ich habe versucht, die Art und Weise, wie der Phoenix-Client es erstellt, zu replizieren. Anstatt das Zeichen gibt ich den vollständigen Endpunkt übergab ...
Ich habe
<script id="app-json" type="application/json"><%= raw @json %></script>
Was ich auf dem Client zu lesen, das Token in JSON einen Hash setzen und gehe auf den Elm einbetten
var data = JSON.parse(document.getElementById("app-json").innerHTML)
var token = encodeURIComponent(data.token)
var elm = window.Elm.App.embed(document.getElementById("elm-container"), {
socketEndpoint: "ws://" + window.location.host + "/socket/websocket?token=" + token
})
- 1. Wie die Debug-Flag von Elm 0.18 in Phoenix/Elixier
- 2. Wie übergebe ich Daten an andere Ansichten?
- 3. Wie übergebe ich Context an AsyncTask?
- 4. Wie übergebe ich Kommandozeilenargumente an atom-runner
- 5. Wie übergebe ich einen Verzeichnispfad an os.execvp
- 6. Wie übergebe ich Daten an einen Exceptionhandler?
- 7. Wie übergebe ich Variablenwerte an andere Konfigurationsparameter?
- 8. Wie übergebe ich Parameter an die Teilmenge()?
- 9. Wie übergebe ich this.props.children an Textarea
- 10. Wie übergebe ich Parameter an Ant-Skripte?
- 11. Wie übergebe ich Argumente an meinen Handler
- 12. Wie übergebe ich eine Zeichenkette an setContentView()?
- 13. Wie übergebe ich Befehlszeilenoptionen an Knoten?
- 14. Wie übergebe ich Parameter an XSLT?
- 15. Wie übergebe ich Argumente an Shell-Skript?
- 16. Wie übergebe ich $ (this) an eine Funktion?
- 17. Wie übergebe ich Kommandozeilenargumente an ipython
- 18. Wie übergebe ich Schlüsselwortargumente an reactor.callLater
- 19. Wie übergebe ich Redux-Status an Unterstrecken?
- 20. Wie übergebe ich Parameter an ein Unterprogramm?
- 21. Wie übergebe ich eine Funktion an Enum.each?
- 22. Wie übergebe ich Daten an SectionList?
- 23. Wie übergebe ich Objekte an eine TemplateView?
- 24. Wie übergebe ich Umgebungsvariablen an babelrc?
- 25. Wie übergebe ich EntityManager an @PostUpdate
- 26. Wie übergebe ich den Textboxwert an JavaScript?
- 27. Wie übergebe ich Scope an AngularStrap $ Alert?
- 28. Wie übergebe ich Parameter von Mouse-Event an eine Funktion?
- 29. Wie übergebe ich Parameter an einen Junit-Test von Ant?
- 30. Wie übergebe ich eine Tabelle von Lua an C++?
Hinzugefügt einen Link zu dem obigen Code im Kontext: https://github.com/marick/eecrit/blob/channels/web/elm/C4u.elm Es ist ziemlich roh. –