问题标签 [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 投票
1 回答
106 浏览

haskell - Warp / Scotty在请求结束时没有终止线程/资源

我遇到了一个问题,我的 Scotty 应用程序似乎没有终止旧的 HTTP 请求线程。最终,在大量(10-20)个并发请求之后,我遇到了一个错误 with too many DB connections libpq: failed (FATAL: sorry, too many clients already)


这也发生在 Warp 应用程序(Scotty)中:


为什么会这样?有没有一种简单的方法可以在最后“完成”请求?

我可以手动关闭连接,但理想情况下,我认为用任何其他相关资源终止线程是理想的。


我已经通过在 postgres 中运行以下命令来验证它是否保持连接打开:

Scotty 似乎需要几秒钟才能自动关闭它(在请求完成后)。

0 投票
0 回答
91 浏览

haskell - 如何使用 Haskell 中间件添加 HTTP 请求正文的请求和响应的特定表示

如何在请求记录器中添加请求和响应正文的特定表示?我希望能够有一些typeclass可以让我实现这种表示。在Network.Wai.Middleware.RequestLogger.JSON我可以看到请求记录器是如何实现的。

因此,如果我要收到请求:

我只想通过电子邮件发送:

我通过一些类型类来做到这一点:

这将允许我轻松使用我不想修改其默认行为的类型的 toJSON 和 FromJSON。是否也可以修改它,以便当我的应用程序像“消息”字段或“活动”字段一样运行时,我可以添加一些任意上下文。

0 投票
1 回答
160 浏览

haskell - 有没有办法在 scotty 中捕获所有异常而不将我的所有代码包装在异常捕获中

我希望我的默认处理程序能够捕获我的应用程序抛出的所有异常,但为了实现这一点,我需要在手动添加一些异常捕获后手动调用 raise 我的 IO 代码。

下面是一个示例最小服务器:

我希望能够在我的默认处理程序中捕获所有未捕获的异常,但这不是 scotty 的默认行为,只有在你调用raise. 我可以将我所有的 ActionM 代码块都包装在其中,ExceptT但这似乎是解决此问题的一种混乱/机械的方式。我主要是为了记录目的而这样做,这样我就可以向 Sentry 报告或记录到文件中,这样会更方便。

0 投票
2 回答
88 浏览

haskell - 在同一个应用程序中启动多个 scotty 服务器的最优雅方式?

是否有在同一个应用程序中启动两个 scotty 服务器的标准方法?在我正在尝试的玩具项目中:

第一台服务器启动,但第二台没有。这也可能是我理解 Haskell IO 方式的一个缺陷。谢谢!

0 投票
0 回答
103 浏览

haskell - 如何在 scotty 和 Text.Blaze.Html5 中使用 HTML 选择

我正在使用斯科蒂

选项选择示例图像

我有一个Optionsum 类型,并希望将用户限制在这些选项中。

我的问题是 Text.Digestive.choice 我不知道如何使用它,并感谢您在正确方法上的帮助以实现此目的。

我试图使用下面的代码,但努力让它正确。

编译代码时出现以下错误。

您的帮助将不胜感激

0 投票
2 回答
314 浏览

ajax - 我应该如何使用 Scotty (Haskell) 处理长时间运行的 HTTP 请求?

我正在制作一个简单的网络应用程序,它在文本中查找颜色词,并绘制关于它们的统计数据。如果不太忙,您可以在colors.jonreeve.com上对其进行测试。我正在使用Scotty Web 框架来处理 Web 内容。它适用于短文本,但较长的文本,如完整的小说,需要很长时间,浏览器通常会超时。所以我猜我这里需要的是通过 Jquery AJAX 或其他方式发送表单,然后让服务器每隔一段时间发送 JSON 及其状态(“正在加载文件”,“现在计算颜色”等),然后当它收到“成功”信号时,然后重定向到其他 URL?

这是我第一次尝试做这样的事情,如果这一切听起来不知情,请原谅我。我还注意到那里有一些类似的问题,但我感觉 Scotty 处理事情的方式与大多数设置略有不同。我注意到有一些函数用于设置原始输出、设置标题等。我是否尝试在分析的每个阶段发出某些信号?考虑到 Haskell 对副作用的处理,我将如何做到这一点?在这里,我什至都在努力想出最好的方法。

0 投票
1 回答
83 浏览

haskell - 如何在 ScottyM 中运行 IO

Scotty用来写一个小的网络应用程序。我需要IOScottyM类型内运行。

有几个困难:

首先,我不能自动派生类型同义词MonadIO以便运行liftIO

其次,我不知道如何从中派生 ScottyT MonadIO

我有哪些选择?

谢谢

0 投票
0 回答
48 浏览

haskell - 使用“requestBody”(或“getRequestBodyChunk”)时遇到问题

依赖版本

  • 围:3.2.2.1

概要

我很不清楚getRequestBodyChunkhttps://hackage.haskell.org/package/wai-3.2.2.1/docs/Network-Wai.html#v:getRequestBodyChunk )的工作。我知道它会读取请求中可用的下一个字节块;最后产生一个Data.ByteString.empty指示没有更多可用字节。

因此,给定一个req :: Request; 我正在尝试Conduit从请求正文创建一个:

但是,这似乎立即终止,因为我已经看到跟踪输出:

输出是

因此流终止。

但是我可以通过其他方式验证请求正文不为空。

所以我对此有点困惑,我有几个问题:

  • 这是否意味着请求正文已经被消费了?

  • 或者这是否意味着请求正文没有被分块?

  • 或者这是否意味着对于较小的请求?分块字节总是空的?

  • Scotty 是否覆盖了这一点,特别是对于较小的请求(我似乎无法在其代码/文档中的任何地方找到它。)

  • 如果我做这样的事情:

我确实得到了一个非终止的字节流;这使我怀疑这部分代码之前的某些内容消耗了请求正文:或者该函数返回一个空正文开始。

需要注意的一点是,这似乎只发生在较小的请求中。

另一点需要注意的是,我得到了Wai.Requestvia Web.Scotty.Trans.request;其中也有与身体相关的流媒体助手。

这也可以记录在案吗?我相信getRequestBodyChunk这些信息可以改进 etc. 的文档。

0 投票
1 回答
80 浏览

haskell - 将数据放入请求库的中间件

我正在尝试编写一个 WAI 中间件,将一些数据放入请求的保险库中,但我似乎遗漏了一些东西,因为我以后无法查找它。即使是最简单的中间件也会失败:

然后我像这样使用它:

执行此操作时,http :3000/foo我希望服务器打印Just 42但在 prints 中Nothing,这表明fooMW. 我想我错过了一些关于如何编写中间件或如何使用vault的重要内容,但是什么?

0 投票
1 回答
288 浏览

mongodb - Haskell scotty Action to IO

我又回来尝试学习 Haskell,哦,天哪,这很难!我正在尝试在 Scotty 端点内进行简单的 mongoDB 插入。问题是在 Scotty do 语句中不接受插入函数返回的类型。该程序非常简单:

问题来了

类型错误是

欢迎任何帮助或提示!