现在,如果请求的路由与现有的API端点或其他静态资产不匹配,则需要从后端返回文件(例如,index.html
)并不罕见。这在使用react-router
和browserHistory
时特别方便。Catch-all或默认路由
我有点难以理解,我可能会如何与仆人接触。我确实不知道是否拦截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响应。玩具回购here。
非常感谢,这真的很有帮助! –