问题标签 [yesod]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
haskell - 为什么 Yesod 中没有 ToJSON/FromJSON 的 Persistent 类型实例?
为生成的类型编写 ToJSON/FromJSON 实例并不难,但是,当你生成代码时,你能把它扔进去吗?或者作为 Yesod 用户,有没有一种简单的方法可以实现这一点?(我还没有深入研究 TH 的工作原理……)
更新: 好的,我喜欢这个建议,但是说我的持久类型是用户。如果我使用
它产生
显然是因为它是一个别名。但
产量
我可能仍然有错误的类型,但我找不到足够的关于 Persistent 生成的内容来获得正确的咒语。
haskell - 如何使用 MultiPiece
我对 Yesod 完全陌生(并且在 haskell 方面不是很有经验),我正在尝试构建我的第一个处理程序。我使用默认参数对我的应用程序进行了脚手架(我使用的是 Yesod 0.9.4.1 版本并在脚手架中选择 postgresql),现在我正在尝试使用 selectList 从表中检索一些数据。我在模型配置文件中定义了一个新表(我们称之为 Foo):
并且想要传递 FooId 和其他一些 Foo 属性的列表,所以我定义了一个路由:
/foos/#Int/#Int/*FooId FoosReturnR GET
和一个处理程序:
我在 Application.hs 中导入了处理程序并将其添加到 cabal 文件中,现在当我尝试运行它时,我收到一条错误消息,指出 FooId 不是 MultiPiece 的实例 - 但是当我尝试使其成为实例时,有一个错误说 FooId 是类型同义词并且不能是 MultiPiece 的实例 - 如何解决此问题?
编辑:丹尼尔:嗯,实际上我不知道 FooId 到底是什么——它是 Yesod 魔法的一部分,到目前为止我还不完全理解——它是从表定义中自动生成的——但它是某种数字。
因为我不知道如何使用 MultiPiece 我切换到更简单的解决方案并修改:
路线:/foos/#Int/#Int/#String FoosReturnR GET
处理程序:[还添加了一些日志记录]
现在它正在编译但是当我浏览到:http://localhost:3000/sectors/1/1/1,2我得到一个页面只包含: Internal Server Error Prelude.read: no parse
好吧,我不完全理解这里的 FooId 是什么 - 如何从包含数字的字符串列表中创建这样的 FooId 列表?
当然,最需要如何使 FooId 成为 MultiPiece 实例的解决方案。
编辑:
Daniel 和 svachalek,感谢您的帖子 - 我尝试了您的(Daniel 的)解决方案,但后来我收到错误说 [FooId] 是预期的(如在处理程序函数声明中)但是 FooId 类型被给出,这导致我下面的解决方案:
当然,我将路线更改为:/foos/#Int/#Int/*FooIds FoosReturnR GET
和处理程序:
现在我在编译和运行时都没有遇到任何错误,唯一不满意的是我总是收到 Not Found 结果,即使我提供了应该给我一些结果的参数 - 所以现在我必须弄清楚如何确定准确发送到数据库的 SQL
编辑:
现在我看到“未找到”与问题有关,并且上述编辑不是解决方案 - 当我浏览到 localhost:3000/foos/4930000/3360000 然后我得到结果(但后来 FooIds 是空的) - 但是当我添加如下内容时:localhost:3000/sectors/4930000/3360000/1 然后我总是得到“未找到” - 所以它仍然无法正常工作..
haskell - Yesod wai-eventsource 示例。包依赖问题?
我试图让这个示例代码在我的系统上编译。当我尝试用 编译 Chat 模块时ghc Chat.hs
,ghc 给了我这个:
我在 OS X Snow Leopard 上并清理了(一切?)除了 Haskell 平台,如下所示:
并从 hackage 重新安装了 yesod 和 wai-eventsource。
据我了解,错误来自依赖问题。
其中 yesod-0.9.4.1 需要 wai == 0.4.* 而 wai-eventsource-1.0.0 需要 wai >= 1.0。
所以,我的问题是:现在是否可以让这个示例(使用 yesod 的官方版本)工作?随着所有的变化,yesod 项目正在通过 atm?我是否必须更准确地了解我尝试安装的版本,如果是,如何安装?
编辑:
我清除了(或者实际上遵循了此处~/.ghc
给出的更严格的方法,以防万一)并尝试使用单个安装包,
导致(不完整):cabal install yesod wai-eventsource
在此之前(分别安装了 yesod 和 wai-eventsource)我尝试ghc -hide-package wai-1.0.0 Chat.hs
导致,
haskell - 从 Network.HTTP.Enumerator 迁移到 Network.HTTP.Conduit
我不知道为什么我的代码会中断。起初我以为是因为parseURL
给[]
. requestHeaders
好的,所以也许我只需要告诉它 resquestHeaders 应该是什么。好吧,我检查了requestHeaders
从我的旧的工作代码生成的。它也返回一个[]
. 所以现在我没有想法了。下面是旧的工作代码,遵循我在 GHCi 中尝试使用的新的基于管道的库的东西。
以上工作正常,这是我在迁移时一直在尝试做的事情,以及我收到的错误。
如您所见,它几乎是完全相同的代码。因此,我想就发生的变化以及我应该更仔细地研究的内容提供反馈。另外,如何检查在客户端代码和服务器之间来回发送的 http 标头?
haskell - http-enumerator 和几个新的 yesod 包之间的包冲突
这个问题与这个有关。由于这个包版本冲突,我被提示尝试从 http-enumerator 迁移到 http-conduit。
迁移可能需要一些时间,所以我回到这个问题,希望有一个解决方案。有没有办法让这些单独的版本failure
在同一个 cabal 包中?
另一种方法是使用 curl 绑定的gulp 。我发现这个包带来了有时很奇怪的行为。
internet-explorer-8 - Internet Explorer 8+ 兼容性
我的项目基于 Yesod 0.10 的当前脚手架。我进入了可怕的领域。虽然我的代码在 Firefox 和 Chrome 中都可以正常运行,但我的工作场所要求它也可以在 IE 中运行。好吧,它没有。它只是给我一个“网页无法显示”的错误。我正在使用默认布局,但它仍然抱怨。在下面找到 Yesod 生成的源代码。
haskell - 独立于主机名的 Yesod 应用程序
这是一个非常简单的问题:如何运行一个可以同时处理多个主机的 Yesod 应用程序?
默认的 Yesod 设置可以处理来自任何主机的传入连接,但所有 URL 都会approot
在它们前面呈现。joinPath
如果有一种方法可以存储当前域以便该函数可以使用它,那么在 Yesod 实例声明中覆盖是可能的,但没有。
此 wiki 页面上描述的方法有效,但非常 hackish,因为它强制路由采用附加domain
参数(因为我没有一组静态域来匹配)。出于实际目的(因为我有很多路由,其中一些与域无关),最好有一个不影响路由的解决方案,因为仍然可以从 WAI 请求信息中获取主机名一个处理函数。
我使用需要绝对 URL 的东西(例如电子邮件、RSS、XML API),所以approot _ = ""
不是一个选项。
在编译时,我不知道也不能知道所有需要支持的主机名。
那么,如何呈现 URL,以便它们使用传入请求的主机名,而不是approot
变量?
forms - 表单中的多项输入选择
我有一个表单,用户可以在其中从预先存在的值列表中进行选择,或者创建一个新的(文本)值。
最优雅的编码方式是什么?
我最好的(和 IMO 不那么优雅)这样做的方法是定义:
收到表单后,通过以下方式传递结果:
并让处理程序决定是重新发送表单,还是根据结果继续。
有什么更好/更短的建议吗?我的真实表单有两个这样的选择/创建字段,这使得数据结构和处理更加繁琐。谢谢,
haskell - 如何在单选按钮标签内插入 html(在 Yesod 中)
我尝试将 html 呈现为 radiofieldList 的标签产生了以下错误。
所以,给定下面的代码,创建一个实例是否有意义(RenderMessage Scheduler (Handler RepHtml))
我想到,真正的答案是创建一个接受的自定义字段,(HTML,a)
而不是所需的(msg,a)
radioFieldList
。我希望只为创建一个实例RenderMessage
会起作用。