Podczas Localhost pobrałem kolby. Próbowałem wysłać kilka żądań do serwera kolby, ponieważ kod poniżej całego kodu jest na GitHub.

Niestety nie mogę uzyskać żadnych danych za pomocą żądania pocztowego.

Oto mój kod Elm.

module Update exposing (update)
import Http
import Json.Decode exposing (..)

import Types exposing (..)



update : Msg -> Model -> (Model, Cmd Msg)
update msg model =
    case msg of Username str -> ({ model | loginUserName = str}, Cmd.none)
                Password str -> ({ model | loginPassword = str}, Cmd.none)
                Login -> (model, login model.loginUserName model.loginPassword)
                LoginResult (Ok username) -> ({ model | user = LoggedInUser { userName = username}},
                                              Cmd.none)
                LoginResult (Err _) -> (model, Cmd.none)
                Logout -> (model, Cmd.none)


login : String -> String -> Cmd Msg
login username password =
    let url = "http://0.0.0.0:8080/api/user/login"
        request = Http.get url decodeLogin
    in Http.send LoginResult request


decodeLogin: Decoder String
decodeLogin = at ["username"] string

-- Or
--decodeLogin : Decoder String
--decodeLogin = decodeString (field "username" string)

Reszta kodu jest w GitHub

Oto mój punkt końcowy kolby dla API

@app.route("/api/user/login/", methods=["GET", "POST"])
def login(*args, **kwargs):
    print 'Got request for login'
    print args
    print kwargs
    print request.args
    print request.args.get("username")
    print request.values.get("username")
    print request.method
    print request.form['username']

    response = {'username': 'Erik'}

    dict = request.args
    for key in dict:
        print 'form key ' + dict[key]

    return jsonify(response)

Reszta tego kodu jest również at this link.

0
alexander 6 wrzesień 2017, 17:34

2 odpowiedzi

Najlepsza odpowiedź

Wygląda na to, że Twój serwer oczekuje, że Ciało Post będzie w wielu formacie {X0}}, a nie w JSON. Możesz użyć multipartBody Aby to osiągnąć:

import Http exposing (..)

login : String -> String -> Cmd Msg
login username password =
    let url = "http://0.0.0.0:8080/api/user/login"
        body =
            multipartBody
                [ stringPart "username" username
                , stringPart "password" password
                ]
        request = Http.post url body decodeLogin
    in Http.send LoginResult request
1
Chad Gilbert 6 wrzesień 2017, 16:23

Chcę tylko dodać, chociaż możesz skierować żądanie na adres IP 0.0.0.0 To nie jest adres Twoja aplikacja z kolby słucha. 0.0.0.0 Oznacza, że aplikacja kolby słucha na wszystkich dostępnych adresach IP (co nie obejmuje 0.0.0.0, ponieważ jest zarezerwowany w tym celu). Twoja aplikacja kolby można dotrzeć na 127.0.0.1 i localhost.

2
Tyler Nickerson 8 wrzesień 2017, 22:36