问题标签 [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.
haskell - Scotty:连接池作为单子阅读器
包括阅读器在内的数以万亿计的 monad 教程,当您阅读它时似乎一切都清楚了。但是当你真的需要写的时候,就另当别论了。
我从未使用过 Reader,只是在实践中从未使用过。因此,尽管我读过它,但我不知道该怎么做。
我需要在 Scotty 中实现一个简单的数据库连接池,以便每个操作都可以使用该池。池必须是“全局的”并且可以被所有操作函数访问。我读到这样做的方法是 Reader monad。如果还有其他方法请告诉我。
你能帮我看看如何正确使用阅读器吗?如果我用我自己的例子看看它是如何完成的,我可能会学得更快。
所以上面的很简单。我想在每个 Scotty 操作中使用“运行”功能来访问数据库连接池。现在,问题是如何将它包装在 Reader monad 中以使其可供所有函数访问?我知道对于所有 Scotty 操作函数,“池”变量必须“像全局”。
谢谢你。
更新
我正在使用完整的代码片段更新问题。我将“池”变量传递到函数链的位置。如果有人可以展示如何更改它以使用 monad Reader 请。我不明白该怎么做。
谢谢。
更新 2
我尝试按照下面建议的方式进行操作,但它不起作用。如果有人有任何想法,请。编译错误列表太长了,我什至不知道从哪里开始......
更新 3
感谢cdk提供的想法,并感谢Ivan Meredith提供 scottyT 的建议。这个问题也有帮助:如何将 Reader monad 添加到 Scotty 的 monad 这是编译的版本。我希望它可以帮助某人并节省一些时间。
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 转换器,我似乎完全迷失了方向。
haskell - Scotty 的 ActionT 的 MonadReader 实例
我有类型
我正在尝试为此创建一个 MonadReader 实例,这样我就不必提出询问,但总是得到
我尝试了一堆实例类型,下面有几个,但他们总是得到上述错误
我觉得我缺少实例的基本内容。我想我明白FlexibleInstances
了,但我看不出这如何适用于此。
任何有关实例类型的帮助都将不胜感激,我想实现自己ask
,local
因为主要目标是学习。
谢谢。
更新
我得到了它FlexibleInstances, MultiParamTypeClasses, UndecidableInstances
和
仍在努力执行本地。我也假设UndecidableInstances
是坏的?
更新 2
我想我真正需要的是。
但我还是想不通local
mongodb - Scotty 使用 MongoDB
我对 Haskell 比较陌生,这是我第一次使用 monad 转换器。我真的很感激一些帮助。
我正在尝试mongodb
在 Web 框架下查询数据库scotty
,但我收到关于MonadBaseControl
. 我真的必须创建一个实例才能使用 连接到数据库scotty
,我将如何去做?
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 代码探测连接可用性三次,然后出错。我该怎么做?
谢谢。
haskell - 我如何限制scotty中文件上传的大小?
我目前正在研究 Scotty 进行 Web 开发,到目前为止它看起来还不错。不过我很担心,似乎没有办法在文件大小超过一定限制的情况下丢弃文件上传(或者更好的是任意 POST 正文)而不先接收整个文件。https://github.com/scotty-web/scotty/blob/master/examples/upload.hs上的示例没有提到文件大小限制,我在文档中找不到任何内容。
我当然可以length
在 ByteString 上做一个,但是在整个文件已经加载到内存之前我看不到它是如何工作的。
json - 将 Persistent 的 getJust 与 entityIdToJSON 一起使用的问题
我是 Haskell 的新手,正在尝试编写一个使用 Persistent 作为 ORM 的 Scotty Web API。我在使用以下代码时遇到问题:
该resource
函数为我想要公开的持久模型对象定义了 Scotty Web 路由。
定义的第一个路由resource
检索整个集合。例如HTTP GET
返回/accounts
所有帐户。
定义的第二条路由resource
通过 id 检索特定实体。例如 aHTTP GET
返回/account/1
id 为 1 的帐户。
这些函数按原样工作,但我不喜欢默认的 json 序列化不包含 id,这就是我entityIdToJSON
在 get all 路由中使用的原因。
但是,当尝试entityIdToJSON
在 get by id 路由中包含 时S.json $ found
,我收到以下类型错误:
我尝试将类型约束添加Entity a
到资源中,这让事情变得更糟。我还尝试在有关 hackage 的文档中进行挖掘,但我不太了解我正在阅读的所有内容。文档似乎表明密钥是实体及其密钥。
tl; dr - 我的问题是尝试使用 Persistent 的 getJust 函数的结果,一个 Key 和 Persistent 的 entityIdToJSON 函数,该函数需要一个实体。
有任何想法吗?
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。
haskell - 关于 scotty Haskell Web 框架的简单问题
考虑最简单的 scotty 应用程序:
我将这段代码放入app.hs
并用 GHC 编译。我用./app
. 简单的。
当人们访问该网站时,究竟会发生什么?只有一个
./app
在运行。每当每个用户触发一行时,是否会在同一个应用程序中创建一个新线程get "/:word" $ do
?可以存在多少这样的线程?千?万?运行
./app
后显示消息Setting phasers to stun... (port 3000) (ctrl-c to quit)
。但它没有显示更多。它不输出传入的网络请求。我怎样才能让它做到这一点?这对于记录目的很有用。
haskell - 如何在使用 Scotty / wai 的代理后面记录真实 IP 地址
这是我的 scotty 应用程序,请注意我如何将请求记录到控制台:
我的 scotty 应用程序使用代理机制在 nginx 后面运行。这会导致 scotty 应用程序像这样记录:
我希望记录真实 IP 地址。
我在我的 Node.js/Express 应用程序中遇到了同样的问题,我在这里解决了这个问题:
如何在 Scotty 中解决这个问题?