用榆木在碎片中解析查询字符串



出于原因,我需要解析某些外观格式为查询字符串(即 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,我可以在Callback中运行String

URL解析器仅将URL片段视为String,但您可以在解析之前用?替换#

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

然后,您将在查询部分中获得片段,以便您正常解析。

最新更新