如何在没有脚手架结构的Yesod上设置"cors"?



在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的应用程序中运行,该应用程序有makeApplicationApplication.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

最新更新