Sjekker om en mappe eksisterer

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å