问题标签 [haskell-wai]

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 回答
214 浏览

haskell - 是什么力量驱使 WAI 应用进行五次重新设计?

我好奇地看了一眼WAI界面,虽然它看起来很简单,但我惊讶地发现它需要多少次迭代才能稳定在当前形式!

我曾认为用于资源安全的 CPS 样式将是最有趣的事情,但看起来还有很多东西需要学习!

一些考古得出的结果有些不尽人意:

0 投票
1 回答
359 浏览

scotty - 如何使用 Scotty / wai 设置 cookie?

我浏览了 Scotty 文档,但我只看到了设置 HTTP 标头的能力,这似乎有点低级。

有没有更优雅的方法来实现这一点?第三方库?

据我所知,一个解决方案是使用mapHeaderfrom Network.Wai.Util。但就像提到的那样,这似乎相当低级。

还有一个cookie包,但它似乎只返回一个完全呈现的cookie“字符串”,而不是能够检索键/值。

还有:https://hackage.haskell.org/package/HTTP-4000.3.9/docs/Network-HTTP-Cookie.html但是好像没有Expiry参数?

0 投票
2 回答
315 浏览

haskell - 流式传输字节串作为 WAI HTTP 服务器响应正文

我有一个值body :: BS.ByteString (ResourceT IO) (),来自一个基于BS.readFile. 我想将该值作为来自WaiApplication的响应正文进行流式传输。有一个助手,streamingResponse它接受 type 的值Stream (Of ByteString) IO r。我可以通过使用将我的转换BS.ByteString (ResourceT IO) ()Stream (Of ByteString) (ResourceT IO) ()BS.toChunks但它包含一个额外的ResourceT单子层。传递bodystreamingResponse我:

我尝试了各种方法,例如在 runResourceT 中包装东西、绑定和提升值等,但真的不知道如何进行。如果需要额外的上下文,这是完整项目中的行

更新0

hoist runResourceT body似乎类型检查。有人还向我推荐了一个 Haskell Pipes thread,这可能是一个非常相关的问题,并且可能暗示了一个解决方案。

0 投票
1 回答
579 浏览

haskell - 围模板函数找不到Libz.so

<command line>: can't load .so/.DLL for: libz.so (libz.so: cannot open shared object file: no such file or directory)

这是我在尝试安装一些 WAI 库时遇到的错误:

  • wai-app-static-3.1.6.2
  • wai-websockets-3.0.1.2

这似乎与Template Haskell 存在动态链接问题有关。链接到 zlib 的其他包(或 libz 或 z 或 libz1g 或任何月份包管理器选择调用标准压缩库的风格)工作正常,只有那些试图在编译时动态链接到它的包时间。

我用过nix-env -i zlib && nix-shell -p zlib

我已经按照其他 zlib 问题的建议完成apt-get installzlib1g, zlib1g-dev, lib32z1, zlib1g:i386, libc6-i386, lib32stdc++6, lib32gcc1, (?!) 。lib32ncurses5

whereis libz.so给出了/usr/lib/x86_64-linux-gnu/libz.a /usr/lib/x86_64-linux-gnu/libz.so所以我认为该库实际上已安装。

通过剥离所有 TH 代码,我得到了 wai-app-static 的精简版本,但我无法在不破坏整个包的情况下从 wai-websockets 中提取它。

有没有人找到一种方法来安装这些库,最好是使用 Nix,但在这一点上,我可以实现它。我已经尝试了三天来获得一个有效的构建,并且已经浪费了我整个星期的项目时间,而没有编写任何我自己的代码。在这一点上,我将采取任何可行的技巧。


有人询问使用的命令行。这是由 cabal 生成的:

0 投票
0 回答
109 浏览

haskell - 如何存储从中间件生成的值并从路由中检索它们

我有一个产生两个值的 wai 中间件:

  1. 为每个请求随机生成的请求 id
  2. 一个用户从一个请求到另一个服务。

这是代码:

现在我有一条路线GET /user。在这条路线内部,我想访问请求 ID 和用户。例如,我可能只是将它们打印在日志中。

问题是由于请求 id 和用户是从中间件生成的,如何从路由中访问它们?基本上如何实现上面代码中用到的以下函数:

场景是中间件是一个 Auth 中间件,它将请求转发到另一个服务进行身份验证并取回用户值,这将在路由中需要。

0 投票
1 回答
178 浏览

haskell - 每个请求数据的中间件

clojure中,我可以这样写:

my-header在这个中间件中,我正在检查 in中是否有非零值:headers,如果是,我将在request地图中附加一些数据。这表明我可以将requestresponse视为有点“有状态”的数据。

我还是 haskell 的新手,想用scotty. 在查看了中间件的类型之后,我可以创建一个这样的中间件:

盯着类型看了半天,还是不知道该怎么做。一些阅读和思考使我认为这是不可能的,Middleware只能使处理程序短路和/或更改生成的响应。这是真的?


0 投票
1 回答
211 浏览

haskell - WAI 教程 - 没有实例(显示响应)

同样是这里的 n00b:使用文档中的以下代码尝试 Warp 和 WAI。

在 GHCi 中运行 plainIndex 会返回:

两个问题合二为一:你能帮我解决这个问题吗,并且对此进行扩展:我是唯一一个在遵循文档示例时经常遇到此类问题的人?

0 投票
1 回答
252 浏览

haskell - 设置 Wai Middleware 请求记录器以丢弃(不记录)一些请求

health我有一个应用程序,其中 Nginx 反向代理向我的端点发出大量请求。我不想记录这些,所以我的输出日志更小。我还使用 JSON 将所有内容记录为 JSON Network.Wai.Middleware.RequestLogger.JSON,它具有将日志消息格式化为 JSON 的功能。

可以做的一件事是记录一个空的字节串,但我在想可能有某种方法可以不操作日志调用。我无法通过查看RequestLogger.wai-extra

有没有人建议如何构建自定义Middleware以不记录某些请求?

0 投票
1 回答
142 浏览

haskell - 有没有办法访问 Wai Web App 的 cookie 标头?

我有一个仆人网络应用程序。我需要访问 cookie 标头以进行调试。从浏览器中,我可以访问包括 cookie 标头在内的标头。在服务器上,我使用 Wai 的 RequestLogger 来记录请求。但是,结果不显示 cookie 标头。

有没有办法访问 Wai 应用程序中的 cookie 标头?

0 投票
2 回答
191 浏览

haskell - 如何快速检查从 IO 构建的仆人应用程序?

我正在使用 Servant 编写 API 服务器。服务器包括持久状态。我想使用 QuickCheck 为服务器编写测试。

构成仆人应用程序的各种端点的实现需要一个数据库值。毫不奇怪,数据库值的创建是在IOmonad 中。

我不明白如何将 Hspec、Wai、QuickCheck 和 Servant 中的部分组合在一起,以使它们都满足。

我看到我可以执行 IO 作为创建 Hspec Spec 本身的一部分,并且我看到我可以指定在 Hspec Spec 中的每个项目之前执行 IO。在这种情况下,这些功能似乎都没有帮助。需要为属性的每个 QuickCheck 迭代执行 IO。如果没有这个,数据库会从每次迭代中累积状态,这会使属性的定义无效(或者至少使它变得更加复杂)。

下面是我尝试为这种场景创建一个最小的、独立的示例。

这不输入检查:

我不知道是否有办法将 aWaiExpectation放入 aPropertyM IO ()中。我什至不知道monadicIO这里是否有帮助。

我怎样才能把这些碎片拼在一起?