在Elm中指定Http头

Jas*_* O. 7 http elm

我的Elm程序可以正常使用下面的代码(摘录)http.get,但我不得不将其更改为自定义请求以在标头中指定JWT,并且由于类型不匹配而出现以下错误.

我想我需要的类型更改requestHttp.Request (List QFields),但不知道如何.显然,我不能说它{ verb = "Get" ...} decoder因为{ verb ... }不是一个功能.

The 2nd argument to function `send` is causing a mismatch.

264|                Http.send FetchHNTopStories request
                                                ^^^^^^^
Function `send` is expecting the 2nd argument to be:

    Http.Request (List QFields)

But it is:

    Request
Run Code Online (Sandbox Code Playgroud)
<Working code>

request : Http.Request (List QFields)
request = 
    let 
       decoder =
        JD.at [ "data", "qQry" ] <|
            JD.list qDecoder
    in
       Http.get ("http://localhost:3000/graphql?query=" ++ encoded) decoder

type Msg
    = SendMessage
    | FetchHNTopStories (Result Http.Error (List QFields))
     ...

initModel : Taco -> ( Model, Cmd Msg )
initModel taco =
    let
        startModel = { newMessage = ""
                    }

        cmd =  Http.send FetchHNTopStories request  
    in
        ( startModel
           ! [cmd]
        )
Run Code Online (Sandbox Code Playgroud)
<Changed code - Not working>

request : Request
request  =
    let

        decoder =
            JD.at [ "data", "Qry" ] <|
                JD.list qDecoder

        headers= [
            ("Authorization","Bearer eyJhbGciOiJIUzUxM...kv6TGw7H1GX2g")
        ]

    in
          { verb = "GET"
            , headers = headers
            , url = url
            , body = Http.emptyBody
            , expect = Http.expectJson decoder
            }  
Run Code Online (Sandbox Code Playgroud)

ahs*_*tro 11

如果我理解正确,你需要使用Http.request,而不是Http.get,并提供一个有效的记录,如下所示:

request : Http.Request (List QFields)
request =
    let
        decoder =
            JD.at [ "data", "Qry" ] <|
                JD.list qDecoder

        headers =
            [ ( "Authorization", "Bearer eyJhbGciOiJIUzUxM...kv6TGw7H1GX2g" )
            ]
    in
    Http.request -- This line is missing from your code
        { method = "GET"
        , headers = headers
        , url = url
        , body = Http.emptyBody
        , expect = Http.expectJson decoder
        , timeout = Nothing
        , withCredentials = False
        }  
Run Code Online (Sandbox Code Playgroud)