0

我习惯使用 Dart,在服务器和客户端之间共享类型就像将相关包导入项目一样简单。

Yesod/Haskell 可以完成类似的事情吗?我应该为客户端使用 GHCJS 吗?也许榆树?目标是不必担心数据在服务器和客户端之间的传输中被破坏——也不必编写一行 JS。:o)

我还没有找到任何关于如何使用 Haskell 最好地应对这一挑战的好的、适合初学者的文档。我怀疑我只是没有找对地方。任何和所有的帮助都非常受欢迎。

4

1 回答 1

1

为了实现这一点,GHCJS您可以以这种方式从三个核心包中构建您的项目:

  • 前端 - 基于 ghcjs-dom 的东西,我喜欢Reflex-dom
  • 后端 - 使用你最喜欢的框架,我喜欢Snap,Yesod 应该可以正常工作
  • shared - 在前端和后端之间共享的代码

当然,前端和后端都依赖于共享。前端用 编译GHCJS,后端用GHC.

如果您想查看完整的示例,我强烈建议您学习hsnippet。查看WsApi.hs一组上行和下行消息的定义位置。所有 JSON 实例都在一个地方派生并在前端和后端导入。

Hsnippet 使用 websockets。这当然不是要求。您可以在自己的应用程序中使用常规 XHR。原理保持不变。您在共享包中定义 API 和序列化实例(通常是 JSON),并在前端和后端导入相关模块。

就我个人而言,我还共享验证代码、使用持久化生成的数据库实体定义等。一旦您设置共享其他内容,主要是复制粘贴到其中一个共享模块,然后在任何地方导入。

于 2016-07-31T16:54:52.947 回答