在yesod中有关于启用CORS
的明确文档https://github.com/yesodweb/yesod-cookbook/blob/master/cookbook/Allowing-WOFF-fonts-to-be-accessed-from-other-domains-%28CORS%29.md using-wai-cors-package
,但它需要在scaffold
的应用程序中运行,该应用程序有makeApplication
和Application.hs
在我的例子中,代码库不是由yesodsscaffold
构建的,现在尝试作为RESTful服务公开。
mkYesod "App" [parseRoutes|
/Hello HelloR POST OPTIONS
/version VersionR GET
|]
如何在这种情况下添加CORS
支持?
裁判:
- http://hackage.haskell.org/package/wai-cors
下面是我如何解决这个问题的代码。
使用toWaiApp
提取application
实例并使用cors中间件封装。
mkYesod "App" [parseRoutes|
/Hello HelloR POST OPTIONS
/version VersionR GET
|]
main :: IO ()
main =
do
app <- toWaiApp App
run 8081 $ defaultMiddlewaresNoLogging $ cors (const $ Just $ simpleCorsResourcePolicy { corsOrigins = Nothing , corsMethods = ["OPTIONS", "GET", "PUT", "POST"] , corsRequestHeaders = simpleHeaders }) $ app