- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
如今,如果请求的路由与现有 API 端点或其他静态 Assets 不匹配,则需要从后端返回文件(例如 index.html
)的情况并不罕见。当使用 react-router
时,这特别方便。和 browserHistory
.
我有点困惑如何用Servant来处理这个问题。我确实想知道拦截 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 响应。玩具 repo here .
最佳答案
基本上你明白了。 serveDirectory "static"
可以被任何 wai Application
替换,例如,我们可以:
...
{-# LANGUAGE OverloadedStrings #-}
...
import Network.Wai (responseLBS)
import Network.HTTP.Types (status200)
...
server :: Server API
server = wombats
:<|> wombat
:<|> hello
hello :: Application
hello req respond = respond $
responseLBS
status200 --
[("Content-Type", "text/plain")] -- headers
"Hello, World!" -- content
...
初步估计,wai 应用程序只是请求 -> 响应
,但是the docs讲一个更完整的故事:
Request -> (Response -> IO ResponseReceived) -> IO ResponseReceived
因此,既然您可以访问 IO,您就可以检查文件是否存在,如果存在则提供该文件,否则执行您喜欢的操作。事实上,wai 定义了 type Middleware = Application -> Application
,因此您可能会想到一个方便的中间件,它将 hello
(或任何其他应用程序!)包装在文件中-检查器和服务器。
关于haskell - 包罗万象或默认路由,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40651661/
我有一个连接到后端和 DialogFlow/ApiAI 的聊天机器人。 我正在尝试在 Alexa 中设置一项技能,以便我可以捕捉到对我的技能所说的所有内容,然后将其转发到我的后端,以便我可以使用我现有
在具有一系列 ctors(其中大部分只有一个参数)的类中,我希望所有单参数 ctors 也被相应的赋值运算符镜像。 ctor包括但不限于copy-ctor和move-ctor。所以这应该满足五法则。
正如我之前提出的一个问题所示, Overload resolution, templates and inheritance ,将在需要派生到基础转换的重载之前选择模板重载。 但是,有没有一种方法可以
我想实现以下目标: /webapp-context/Page-1 -> Handled by my custom "ContentServlet" /webapp-cont
我没有使用任何模板引擎。我想将所有内容重定向到我的静态文件/public/desktop.html app.use(express.static(__dirname + '/public')); fu
我是一名优秀的程序员,十分优秀!