index.html
如今,如果请求的路由与现有 API 端点或其他静态资产不匹配,则需要从后端返回文件(例如 )的情况并不少见。这在使用react-router
and时特别方便browserHistory
。
我对如何与仆人一起处理这件事有点难过。我确实想知道拦截 404 是否是可行的方法,但是当然有时 API 需要合法地发出 404。这是我一直用来试验的那种东西:
data Wombat = Wombat
{ id :: Int
, name :: String
} deriving (Eq, Show, Generic)
instance ToJSON Wombat
wombatStore :: [Wombat]
wombatStore =
[ Wombat 0 "Gertrude"
, Wombat 1 "Horace"
, Wombat 2 "Maisie"
, Wombat 3 "Julius"
]
wombats :: Handler [Wombat]
wombats = return wombatStore
wombat :: Int -> Handler Wombat
wombat wid = do
case find (\w -> Main.id w == wid) wombatStore of
Just x -> return x
Nothing -> throwE err404
type API =
"api" :> "wombats" :> Get '[JSON] [Wombat] :<|>
"api" :> "wombats" :> Capture "id" Int :> Get '[JSON] Wombat :<|>
Raw
api :: Proxy API
api = Proxy
server :: Server API
server = wombats
:<|> wombat
:<|> serveDirectory "static"
app :: Application
app = serve api server
main :: IO ()
main = run 3000 app
如果请求与 API 端点或静态目录中的任何内容不匹配,我很想看到一个示例,说明如何添加发送 HTML 响应的“默认路由”。玩具回购在这里。