Elm:
Sjekker om en mappe eksisterer
Hvordan:
Elm er et front-end webprogrammeringsspråk, så det har ikke direkte tilgang til filsystemet. Imidlertid ville du typisk sende en kommando til en bakendtjeneste i JavaScript. Her er hvordan du kan strukturere en slik interaksjon med Elm:
port module Main exposing (..)
-- Definer en port for å snakke med JavaScript
port checkDir : String -> Cmd msg
-- Eksempel på bruk
checkDirectory : String -> Cmd Msg
checkDirectory dir =
checkDir dir
Deretter, i JavaScriptet ditt:
app.ports.checkDir.subscribe(function(dir) {
var exists = fs.existsSync(dir); // Dette bruker Node's 'fs' modul for å sjekke katalogen
app.ports.dirExists.send(exists);
});
Tilbake i Elm, håndter responsen:
port dirExists : (Bool -> msg) -> Sub msg
type Msg = DirExists Bool
subscriptions : Model -> Sub Msg
subscriptions model =
dirExists DirExists
Merk: Dette krever oppsett av porter og passende bakendhåndtering i JavaScript.
Dypdykk
Elm sitt nettleserrestriktede miljø betyr at det ikke kan få tilgang til filsystemet direkte, i motsetning til Node.js. Historisk sett har server-side språk og Node.js gitt funksjonalitet for tilgang til filsystemet, med nettleserspråk som støtter seg på server-APIer for å håndtere filer. Elms strenge typsystem håndterer ikke naturlig sideeffekter som I/O-operasjoner; i stedet bruker det porter for JavaScript-interoperabilitet. Selv om Elm i seg selv ikke kan sjekke om en katalog eksisterer, tillater bruk av Elm med en bakendtjeneste via porter denne funksjonaliteten i webapplikasjoner.
Alternativer i et Node.js-miljø inkluderer metodene fs.existsSync
eller fs.access
. For Elm, vurder server-side Elm med en bakend som elm-serverless
som kan håndtere filoperasjoner mer direkte enn klient-side Elm.
Når det gjelder implementering, når du har satt opp portene dine, sender Elm-appen din meldinger til JavaScript som utfører sjekken av filsystemet. JavaScript sender deretter resultatene tilbake til Elm. Dette holder Elms front-end kode ren og fri for sideeffekter, og opprettholder dens arkitekturprinsipper.
Se også
- Elms offisielle guide om porter: https://guide.elm-lang.org/interop/ports.html
- Node.js
fs
modul dokumentasjon: https://nodejs.org/api/fs.html - elm-serverless for server-side Elm-interaksjoner: https://package.elm-lang.org/packages/ktonon/elm-serverless/latest/