Разбор строки запроса внутри фрагмента с помощью Elm - PullRequest
3 голосов
/ 19 марта 2019

По причинам Мне нужно проанализировать то, что выглядит, отформатировано как строка запроса (т.е. key=value&another_key=another_value), но находится во фрагменте URL, например:

http://example.com/callback#id_token=my_long_jwt&state=some_state

Если бы # был ?, тогда было бы легко использовать <?>, но я не могу понять, как (или если) я могу использовать Url.Parser.Query, когда это во фрагменте.


Я могу получить фрагмент как String:

import Url.Parser as Parser
import Url.Parser exposing ((</>))

type Route = Callback String | NotFound

route : Parser.Parser (Route -> a) a
route = Parser.map Callback (Parser.s "callback" </> fragmentWithDefault )

fragmentWithDefault : Parser.Parser (String -> a) a
fragmentWithDefault = Parser.fragment <| Maybe.withDefault "no_fragment"

toRoute : Url.Url -> Route
toRoute url = Maybe.withDefault NotFound (Url.Parser.parse route url)

Но в Url.Parser.Query нет API, который запускает Url.Parser.Query.Parser, для которого я могу запустить String в Callback.

1 Ответ

4 голосов
/ 19 марта 2019

Парсер Url просто обрабатывает фрагмент Url как String, но вы можете заменить # на ? перед анализом:

Maybe.withDefault url <| Url.fromString <| String.replace '#' '?' <| Url.toString url

, тогда вы получите свой фрагмент в части запроса, чтобы вы моглиразбери нормально.

...