问题标签 [scotty]

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.

0 投票
2 回答
2144 浏览

haskell - Scotty:连接池作为单子阅读器

包括阅读器在内的数以万亿计的 monad 教程,当您阅读它时似乎一切都清楚了。但是当你真的需要写的时候,就另当别论了。

我从未使用过 Reader,只是在实践中从未使用过。因此,尽管我读过它,但我不知道该怎么做。

我需要在 Scotty 中实现一个简单的数据库连接池,以便每个操作都可以使用该池。池必须是“全局的”并且可以被所有操作函数访问。我读到这样做的方法是 Reader monad。如果还有其他方法请告诉我。

你能帮我看看如何正确使用阅读器吗?如果我用我自己的例子看看它是如何完成的,我可能会学得更快。

所以上面的很简单。我想在每个 Scotty 操作中使用“运行”功能来访问数据库连接池。现在,问题是如何将它包装在 Reader monad 中以使其可供所有函数访问?我知道对于所有 Scotty 操作函数,“池”变量必须“像全局”。

谢谢你。

更新

我正在使用完整的代码片段更新问题。我将“池”变量传递到函数链的位置。如果有人可以展示如何更改它以使用 monad Reader 请。我不明白该怎么做。

谢谢。

更新 2

我尝试按照下面建议的方式进行操作,但它不起作用。如果有人有任何想法,请。编译错误列表太长了,我什至不知道从哪里开始......

更新 3

感谢cdk提供的想法,并感谢Ivan Meredith提供 scottyT 的建议。这个问题也有帮助:如何将 Reader monad 添加到 Scotty 的 monad 这是编译的版本。我希望它可以帮助某人并节省一些时间。

0 投票
1 回答
808 浏览

haskell - 如何将 Reader monad 添加到 Scotty 的 monad?

我正在尝试使用 Scotty 构建一个非常简单的 API。我想扩展 Scotty 单子,以便我的路由处理程序操作能够访问不变的环境。我相信这样做的方法是Reader在堆栈中添加一个 monad。现在我只想传递一些Text数据。

我将 Scotty monads 扩展如下:

https://github.com/stu-smith/Brandy/blob/0838a63537d7e396ac82d58d460c6529349303d3/src/Core.hs

所以我的第一个问题是,这是正确的方法吗?

我已经成功地更改了路由处理程序的类型,但我不知道如何使用这个堆栈启动 Scotty。我尝试了以下方法:

https://github.com/stu-smith/Brandy/blob/0838a63537d7e396ac82d58d460c6529349303d3/src/Main.hs

但我得到了错误:

所以我的第二个问题是,如何使用不同的 monad 堆栈启动 Scotty?这是我第一次尝试使用 monad 转换器,我似乎完全迷失了方向。

0 投票
2 回答
433 浏览

haskell - Scotty 的 ActionT 的 MonadReader 实例

我有类型

我正在尝试为此创建一个 MonadReader 实例,这样我就不必提出询问,但总是得到

我尝试了一堆实例类型,下面有几个,但他们总是得到上述错误

我觉得我缺少实例的基本内容。我想我明白FlexibleInstances了,但我看不出这如何适用于此。

任何有关实例类型的帮助都将不胜感激,我想实现自己asklocal因为主要目标是学习。

谢谢。

更新

我得到了它FlexibleInstances, MultiParamTypeClasses, UndecidableInstances

仍在努力执行本地。我也假设UndecidableInstances是坏的?

更新 2

我想我真正需要的是。

但我还是想不通local

0 投票
1 回答
1109 浏览

mongodb - Scotty 使用 MongoDB

我对 Haskell 比较陌生,这是我第一次使用 monad 转换器。我真的很感激一些帮助。

我正在尝试mongodb在 Web 框架下查询数据库scotty,但我收到关于MonadBaseControl. 我真的必须创建一个实例才能使用 连接到数据库scotty,我将如何去做?

0 投票
1 回答
185 浏览

mongodb - Haskell:延迟测试连接可用性N次(从scotty到mongodb)

我对以正确顺序开始的 scotty web 应用程序和 mongodb 服务有一个愚蠢的问题。我先使用 systemd 启动 mongodb,然后再启动 scotty web 应用程序。由于某种原因它不起作用。该应用程序从 mongodb 驱动程序中出错,connect: does not exist (Connection refused)这意味着连接尚未准备好。

所以我的问题。如何以 0.5 秒的间隔测试连接可用性 3 次,然后才出错?

这是应用程序的主要功能

尽管应用服务是在 mongodb 服务之后排序的,但在应用启动期间与 mongodb 的连接仍然不可用。所以我得到了上面提到的错误。这是 systemd 服务文件,以避免有关正确服务顺序的问题。

我不知道为什么在正确的服务顺序下无法连接到 mongodb。所以我想用 0.5 秒的延迟用 haskell 代码探测连接可用性三次,然后出错。我该怎么做?

谢谢。

0 投票
2 回答
470 浏览

haskell - 我如何限制scotty中文件上传的大小?

我目前正在研究 Scotty 进行 Web 开发,到目前为止它看起来还不错。不过我很担心,似乎没有办法在文件大小超过一定限制的情况下丢弃文件上传(或者更好的是任意 POST 正文)而不先接收整个文件。https://github.com/scotty-web/scotty/blob/master/examples/upload.hs上的示例没有提到文件大小限制,我在文档中找不到任何内容。

我当然可以length在 ByteString 上做一个,但是在整个文件已经加载到内存之前我看不到它是如何工作的。

0 投票
1 回答
106 浏览

json - 将 Persistent 的 getJust 与 entityIdToJSON 一起使用的问题

我是 Haskell 的新手,正在尝试编写一个使用 Persistent 作为 ORM 的 Scotty Web API。我在使用以下代码时遇到问题:

resource函数为我想要公开的持久模型对象定义了 Scotty Web 路由。

定义的第一个路由resource检索整个集合。例如HTTP GET返回/accounts所有帐户。

定义的第二条路由resource通过 id 检索特定实体。例如 aHTTP GET返回/account/1id 为 1 的帐户。

这些函数按原样工作,但我不喜欢默认的 json 序列化不包含 id,这就是我entityIdToJSON在 get all 路由中使用的原因。

但是,当尝试entityIdToJSON在 get by id 路由中包含 时S.json $ found,我收到以下类型错误:

我尝试将类型约束添加Entity a到资源中,这让事情变得更糟。我还尝试在有关 hackage 的文档中进行挖掘,但我不太了解我正在阅读的所有内容。文档似乎表明密钥是实体及其密钥。

tl; dr - 我的问题是尝试使用 Persistent 的 getJust 函数的结果,一个 Key 和 Persistent 的 entityIdToJSON 函数,该函数需要一个实体。

有任何想法吗?

0 投票
1 回答
416 浏览

haskell - fay 项目的 .cabal 文件示例

我有一个用 scotty 编写的简单网络应用程序。我想使用 fay 生成前端 JS 代码,并在前端和后端之间使用共享类型。

目前,我使用cabal run: 在我的 .cabal 文件中运行我的应用程序,我定义了一个“可执行文件”和“构建依赖”取决于base. 当我在“build-depends”中包含“fay”和“fay-base”时,编译失败,因为Prelude它不明确。

我知道“fay-base”应该替换标准前奏,但我仍然想在后端代码中使用标准前奏。

那么,我应该如何编写我的 .cabal 文件以及我应该在我的 .hs 文件中使用哪些语言扩展名,以便 std Prelude 和 fay Prelude 可以共存?这是正确的方法吗?

我正在使用 fay-0.20.1.1。

0 投票
2 回答
1917 浏览

haskell - 关于 scotty Haskell Web 框架的简单问题

考虑最简单的 scotty 应用程序:

我将这段代码放入app.hs并用 GHC 编译。我用./app. 简单的。

  1. 当人们访问该网站时,究竟会发生什么?只有一个./app在运行。每当每个用户触发一行时,是否会在同一个应用程序中创建一个新线程get "/:word" $ do?可以存在多少这样的线程?千?万?

  2. 运行./app后显示消息Setting phasers to stun... (port 3000) (ctrl-c to quit)。但它没有显示更多。它不输出传入的网络请求。我怎样才能让它做到这一点?这对于记录目的很有用。

0 投票
1 回答
1436 浏览

haskell - 如何在使用 Scotty / wai 的代理后面记录真实 IP 地址

这是我的 scotty 应用程序,请注意我如何将请求记录到控制台:

我的 scotty 应用程序使用代理机制在 nginx 后面运行。这会导致 scotty 应用程序像这样记录:

我希望记录真实 IP 地址

我在我的 Node.js/Express 应用程序中遇到了同样的问题,我在这里解决了这个问题:

Express.js:如何获取远程客户端地址

如何在 Scotty 中解决这个问题?