2016-10-03 6 views
1

json api 및 static file serving에 각각 servantNetwork.Wai.Application.Static을 사용하고 있습니다. 이 두 가지에 합류하기를 원합니다. 즉, staticApp이 제공되지 않으면 요청은 jsonApp으로 진행되어야합니다.두 개의 Network.Wai.Application에 가입하십시오.

나는 websocketsOr이 그것을 어떻게하는지 알아 내고 읽는 것을 시도했다.

app :: NW.Application -> NW.Application -> NW.Application 
app staticApp apiApp req respond = 
    staticApp req (\ response -> 
        do 
        if (Status.statusCode . NW.responseStatus $ response) < 300 
        then respond response 
        else apiApp req respond) 

을하지만 다른 사람 (자신을 WAI) 여러 가지 경우를 취급을했을 것 같아 ..하지만 난 찾을 수 없습니다입니다 :

WebsocketsOr 나는 마침내 썼다.

내가 누락 된 가장자리의 경우 (예외?)와 다른 API가 동일한 것을 수행하는 데 사용할 수있는 것은 무엇입니까?

답변

1

나는 #servant 채널에서 이것을 묻고 alpounetApplication 처리기를 넣을 수있는 servant Raw에 대해 이야기했습니다. 심지어 serveDirectory API도 있습니다.

import qualified Servant as S 
import Servant ((:>), (:<|>)) 

type JobApi = "job" :> "status" :> S.Capture "id" ST.JobId :> S.Get '[S.JSON] ST.JobStatus 
     :<|> "job" :> S.ReqBody '[S.JSON] ST.JobPostBody :> S.Post '[S.JSON] ST.JobId 
     :<|> "job" :> S.Capture "id" ST.JobId :> S.Get '[S.JSON] ST.JobResult 
     :<|> S.Raw 

serverRouter :: ST.Server -> S.Server JobApi 
serverRouter server = statusGet 
    S.:<|> jobPost 
    S.:<|> jobGet 
    S.:<|> S.serveDirectory "assets" 
    where 
    -- ... so on