小编Chr*_*ink的帖子

在Yesod中允许跨源请求

我的应用程序使用bookmarklet,我需要允许CORS,MyRouteR因此我的bookmarklet代码可以使用此路由进行AJAX请求.

在我的配置/路由初稿中,我MyRouteR只支持一种请求方法PUT.但事实证明,我还需要支持OPTIONS方法,这些浏览器用于CORS预检请求.

我在config/routes中得到了以下结果:

/myroute MyRouteR PUT OPTIONS
Run Code Online (Sandbox Code Playgroud)

我有点希望在模板Haskell中有一些相关的机制来处理配置/路由,这样在这个路由的方法列表中添加OPTIONS会自动导致CORS支持,但没有骰子.不是世界末日,但它会有意义并且感觉优雅.

为了使CORS工作,我给路由一个OPTIONS处理程序:

optionsMyRouteR :: Handler RepPlain
optionsMyRouteR = do
    addHeader "Access-Control-Allow-Origin" "*"
    addHeader "Access-Control-Allow-Methods" "PUT, OPTIONS"
    return $ RepPlain $ toContent ("" :: Text)

putMyRouteR :: Handler RepJson
putMyRouteR = do
    addHeader "Access-Control-Allow-Origin" "*"
    -- more stuff ...
Run Code Online (Sandbox Code Playgroud)

这是有效的,但感觉有点不太正常,因为它是如此的样板.那么,有两个问题:

  1. 我们有比Yesodic更好的形容词吗?
  2. 还有另一种更好的方法让路由支持跨源请求吗?

ajax haskell bookmarklet cors yesod

15
推荐指数
1
解决办法
1213
查看次数

手动呈现路线的URL

我正在尝试渲染一个包含href值为的链接的页面"javascript:#{mySmallJsSnippet}",其中mySmallJsSnippet有一些Javascript会将当前页面添加到<script>标记中src="http://e.g.com/static/myFullJsFile.js".

我有几个问题,但主要的一个是令人尴尬的简单:

给定一条路线 - 例如StaticR myFullJsFile_js- 如何将路线的URL渲染为字符串,以便将其嵌入mySmallJsSnippet?基本上,我不知道如何在我的处理程序代码中执行Yesod的模板渲染机制自动执行的操作@{fooBaR}.

我怀疑它有做renderRoutejoinPath,但我没有使用joinPath正确的.到目前为止,我最好的猜测是App从Foundation.hs 导入并将其作为joinPath第一个参数传递- 不行.

我会继续寻找,但是能得到一些帮助会很棒,因为我确信对于有过Yesod经验的人来说这很简单.

haskell yesod

3
推荐指数
1
解决办法
527
查看次数

标签 统计

haskell ×2

yesod ×2

ajax ×1

bookmarklet ×1

cors ×1