약간의 시행 착오 끝에 Yesod에서 JSON POST에서 객체를 잡고 EventFolder
엔티티를 만들고 데이터베이스에 저장하기 위해 다음 기능을 생성했습니다.Yesod에서 "extractEntityFromPostedJson"을 어떻게 추출 할 수 있습니까?
postAddEventFolderR :: Handler RepJson
postAddEventFolderR = do
r <- waiRequest
v <- liftIO . runResourceT $ requestBody r $$ sinkParser json
let v1 :: EventFolder
v1 = case fromJSON v of
Success a -> a
Error s -> error s
runDB $ insert $ v1
return $ RepJson $ toContent $ show v1
테스트 기능은 curl -H "Content-Type: application/json" -X POST -d '{"name":"test_folder"}' http://localhost:5000/AddEventFolder
입니다.
질문은 음, 우선,이 기능을 작성하는 데 더 간결한 방법이 있는가? 오히려 장황하게 보인다. 둘째, JSON에서 객체를 생성하는 함수를 어떻게 추출 할 수 있을까요? 그래서 나는 하스켈에 완전히 새로운 해요
postAddEventFolderR = do
v1 = extractEntityFromJsonPost (whatever params) :: EventFolder
runDB $ insert $ v1
return $ RepJson $ toContent $ show v1
주 같은 것을 끝낼 싶습니다.
대단히 감사합니다. 마음에 들지 않는다면 위의 예를 위해 저장소의 하나를 링크 할 것입니다. https://github.com/snoyberg/yesod-js/blob/master/samples/todo.lhs – lobsterism
@ 응답 문제 : POST에 응답 할 때 다음 세 가지 중 하나를 수행하는 것이 일반적입니다. 어떤 종류의 "상태 확인"메시지를 반환하거나 리디렉션 응답을 보내도록 수정되었습니다. @lobsterism은 대안 1을 선택합니다. 만약 당신이'name' ='test_folder'로'/ folder/new'에 POST하고 그 폴더가 이미 존재한다면'{ "name": "test_folder (1)"}'로 응답하여'/ 폴더/test_folder (1)'이 생성되었습니다. 분명히 그 코드는 여기서 구현되지 않습니다. – dflemstr
실제로 응답은 단지 자리 표시 자일뿐입니다. 아직도해야 할 일. . . – lobsterism