路由路径中的通配符星号会引发错误
Wildcard character asterisk in route path throws error
一个简单的 yesod 服务器代码,具有用于所有 GET 请求的单个处理程序,我写为:
{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses,
TemplateHaskell, OverloadedStrings #-}
import Yesod
data Links = Links
mkYesod "Links" [parseRoutes|
/* HomeR GET
|]
instance Yesod Links
getHomeR = defaultLayout [whamlet|Go to page 1!|]
main = warpDebug 3000 Links
它抛出一个神秘的错误,
Exception when trying to run compile-time code:
Invalid type: ""
Code: mkYesod
"Links"
([Yesod.Routes.TH.Types.ResourceLeaf
(Yesod.Routes.TH.Types.Resource
"HomeR"
[]
(Yesod.Routes.TH.Types.Methods (Data.Maybe.Just []) ["GET"])
[]
GHC.Types.True)])
我从博客中复制了工作代码并删除了除一个路由之外的所有路由,将通配符 *
添加到单个路由路径作为 [parseRoutes| /* HomeR GET \]
以使其成为所有 url 的处理程序。
而且,代码不再有效。
你必须在 *
之后添加一个 PathMultiPiece
的实例类型,如下所示:
/*Texts HomeR GET
(Texts
只是 [Text]
的同义词是一个实例,因为 Text
是 PathPiece
的一个实例) 当然你必须添加它作为你的处理程序的参数:
getHomeR :: [Text] -> Handler Html
getHomeR parts = defaultLayout [whamlet|Go to page 1!|]
您可以在 yesod documentation
中阅读更多相关信息
一个简单的 yesod 服务器代码,具有用于所有 GET 请求的单个处理程序,我写为:
{-# LANGUAGE TypeFamilies, QuasiQuotes, MultiParamTypeClasses,
TemplateHaskell, OverloadedStrings #-}
import Yesod
data Links = Links
mkYesod "Links" [parseRoutes|
/* HomeR GET
|]
instance Yesod Links
getHomeR = defaultLayout [whamlet|Go to page 1!|]
main = warpDebug 3000 Links
它抛出一个神秘的错误,
Exception when trying to run compile-time code:
Invalid type: ""
Code: mkYesod
"Links"
([Yesod.Routes.TH.Types.ResourceLeaf
(Yesod.Routes.TH.Types.Resource
"HomeR"
[]
(Yesod.Routes.TH.Types.Methods (Data.Maybe.Just []) ["GET"])
[]
GHC.Types.True)])
我从博客中复制了工作代码并删除了除一个路由之外的所有路由,将通配符 *
添加到单个路由路径作为 [parseRoutes| /* HomeR GET \]
以使其成为所有 url 的处理程序。
而且,代码不再有效。
你必须在 *
之后添加一个 PathMultiPiece
的实例类型,如下所示:
/*Texts HomeR GET
(Texts
只是 [Text]
的同义词是一个实例,因为 Text
是 PathPiece
的一个实例) 当然你必须添加它作为你的处理程序的参数:
getHomeR :: [Text] -> Handler Html
getHomeR parts = defaultLayout [whamlet|Go to page 1!|]
您可以在 yesod documentation
中阅读更多相关信息