2017-01-26 2 views
3

In Elm (0.18) Я вызываю одну конечную точку http DELETE, которая в случае успеха отвечает 200 и пустым телом.Http DELETE с пустым телом

В этом случае (для успеха) мне нужно передать сообщение с начальным идентификатором (OnDelete playerId). Но поскольку тело пустое, я не могу его разобрать.

В настоящее время я делаю это так, но есть более элегантный способ, чтобы написать expect часть Http.Request:

Http.expectStringResponse (\response -> Ok playerId) 

?

Это отражает мой текущий код:

deletePlayer : PlayerId -> Cmd Msg 
deletePlayer playerId = 
    deleteRequest playerId 
     |> Http.send OnDelete 


deleteRequest : PlayerId -> Http.Request PlayerId 
deleteRequest playerId = 
    Http.request 
     { body = Http.emptyBody 

     , expect = Http.expectStringResponse (\response -> Ok playerId) 

     , headers = [] 
     , method = "DELETE" 
     , timeout = Nothing 
     , url = "http://someHost/players/" ++ playerId 
     , withCredentials = False 
     } 


type alias PlayerId = 
    String 

ответ

4

Я создал помощник expectUnit для "пустых" 200 ответов.

expectUnit : Expect() 
expectUnit = 
    Http.expectStringResponse << always <| Ok() 



deleteThing : String -> Request() 
deleteThing path = 
    Http.request 
     { method = "DELETE" 
     , headers = [] 
     , url = "http://localhost/api" 
     , body = Http.jsonBody <| Encode.object [ ("path", Encode.string path) ] 
     , expect = expectUnit 
     , timeout = Nothing 
     , withCredentials = False 
     } 

Но для вас, лучше вы могли бы получить это.

{ ... 
, expect = Http.expectStringResponse << always <| Ok playerId 
... 
} 

Или вы можете создать помощника (который на самом деле singleton или pure для Expect)

alwaysExpect : a -> Expect a 
alwaysExpect = 
    Http.expectStringResponse << always << Ok 

Который может быть использован как

{ ... 
, expect = alwaysExpect playerId 
... 
} 
+2

я, как ваш alwaysExpect метод обертку, хотя это огорчает меня, что нет такой вещи из коробки. Я буду отмечать его как правильный ответ, если через несколько дней, если никто не даст лучшего ответа. –

Смежные вопросы