问题标签 [servant]

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

haskell - 用仆人/围服务静态文件

我正在按照本教程http://www.parsonsmatt.org/programming/2015/06/07/servant-persistent.html通过servant 创建API。我想自定义服务器以提供静态文件,但找不到方法。

我正在使用stack构建工具。

我修改了Main.hs文件的运行以包含static( run port $ static $ logger $ app cfg) 并导入了Network.Wai.Middleware.Static (static). 我还添加wai-middleware-static >=0.7.0 && < 0.71到了我的 cabal 文件中。

当我运行时,stack build我得到:( 更新:这部分完全是我的错误。我将包添加到错误的 cabal 文件中.. 蹩脚。导入 Network.Wai.Middleware.Static 工作并提供静态文件。留下下面的错误以防万一任何人搜索它并发现它很有用。)

接下来我尝试使用servant的serveDirectory如下(简化):

我收到此错误:

我是 Haskell 初学者,我对 Wai 不熟悉,所以甚至不确定从哪里开始。我需要对博客文章中的示例代码进行哪些更改才能提供静态文件?

编辑:由于评论从默认视图中隐藏,我将我的最后一条评论粘贴在这里:

这是他博客中马特代码的低调版本。我将他的所有模块合并到一个文件中,删除了所有数据库内容,但没有清理扩展/导入。当我运行此代码时,我收到上述类型不匹配错误。请注意,此代码不使用 Network.Wai.Middleware.Static,而我使用的是符合条件的 Servant StaticFiles 导入。

0 投票
1 回答
847 浏览

haskell - 仆人:上传文件为multipart/form-data

实现文件上传 API 的方法是什么Servant?我正在尝试处理“标准” multipart/form-data,但无法弄清楚如何在 Servant 中声明它。

这显然不起作用,因为它无法处理多部分:

Servant 支持文件上传吗?

0 投票
1 回答
937 浏览

haskell - Haskell Servant 和流媒体

我正在尝试向我的servant服务器添加一个功能,该功能将从 Amazon S3 获取文件并将其流式传输回用户。因为文件可能很大,我不想在本地下载它们然后将它们提供给客户端,我宁愿将它们直接从 S3 流式传输到客户端。

Amazonka用于我对 S3 所做的事情,我可以获得一个 S3 文件的流作为Conduit接收器。

但现在我不知道如何从Sinkto得到EitherT ServantErr IO a

谁能解释我如何做到这一点或向我展示如何做到这一点的一些例子?

0 投票
2 回答
1938 浏览

haskell - 在Servant中添加响应头

我试图弄清楚如何CORS在 Servant 中添加响应标头(基本上,设置响应标头“Access-Control-Allow-Origin:*”)。我在下面写了一个带有函数的小测试用例,addHeader但它出错了。我将感谢您帮助找出以下错误。

代码:

这是我得到的错误:

我有一个工作版本,它的工作原理更简单(简单GET)。但是,对于UserAPI上述类型,它会出错。addHeader函数类型似乎与我认为的类型签名一致。我肯定在这里遗漏了一些东西,否则它不会像这样出错。

0 投票
1 回答
354 浏览

haskell - 在 Servant 的 API 端点内发出请求

0 投票
1 回答
864 浏览

haskell - 在仆人中发送通用内容类型

我正在尝试将一些转发ByteString回客户端(浏览器)。客户端将不知道所请求文档的内容类型,因此我试图将适当的内容类型响应发送回客户端。该文档可以是图像或pdf或word文档等。

例如,客户端将请求/document?id=55,服务器将使用适当的内容类型和关联的ByteString.

我按照这里的例子:我为图像创建了一些东西。

挑战是客户端不会发送带有某些特定标头的请求,因此我无法像在此处Accept:完成的那样对适当的 Mime 类型做出反应。另外,上述内容仅适用于图像(假设浏览器会推断出我发回的内容),但不适用于,等。pngjpegpdfdocx

我考虑了一个参数化类型,例如MyDynamicContent String,我将在运行时传入内容类型,但我不确定如何声明我的 API,即我将使用什么来代替'[JSON]. 甚至不确定这样的事情是否可能,因为这些示例只是一个简单的数据类型。

所以我的问题是,如果我想发送一些ByteString作为响应并Content-Type动态设置标题,那么使用它的最佳方法是什么servant

更新:我打开了一个问题

0 投票
2 回答
479 浏览

json - 使用 Servant 和 Persistent 表示 JSON 中的外键关系

今天早上我跟着这个有趣的教程学习如何使用 Servant 构建一个简单的 API 服务器。

在教程的最后,作者建议添加一个博客类型,所以我想我会试一试,但是我在尝试实现和序列化扩展教程中逻辑的外键关系时遇到了困难(也许是一个重要的此处披露:我对仆人和持久性都是新手)。

这是我的持久定义(我添加了Post):

本教程为 Servant API 构建了一个单独的Person数据类型,所以我也添加了一个名为Article

但是,现在,当我尝试创建一个将 aPost转换为的函数时Article,我在尝试处理User外键时遇到了困难:

我尝试了很多东西,但上面的内容似乎接近我想要进入的方向。但是,由于以下错误,它无法编译:

最终,我不太确定 a 到底是什么PersistEntity.Key User,我错误的谷歌搜索并没有让我更接近。

我该如何处理这种外键关系?


工作版本

感谢haoformayor编辑了答案

0 投票
2 回答
137 浏览

rest - 仆人组合器不会落入后续替代品

我制作了一个自定义组合器:MultipartUpload,但是当我使用它时,它最终不仅应用了我使用它的路线,还应用了所有后续路线:

例如,在以下 API 中,MultipartUpload在第 2 条和第 3 条路线上运行。因此,如果我调用第三个,它将返回错误File upload required。我只希望它适用于第二个。如何?

这是如何MultipartUpload定义的。

0 投票
1 回答
250 浏览

rest - 仆人中的休息 api 或“如何正确混合单子”的简单示例?

我想在servant 0.5中构建一个简单的rest api示例:

我无法编译它,因为在不同的地方有很多“无法匹配预期类型”的错误。我想这是因为我在“getItems”中混合了 2 个不同的单子。但不仅如此。

0 投票
1 回答
118 浏览

rest - 如何为Servant中的所有端点添加前缀?

我在 Haskell 仆人中有一个 hello world 应用程序,这是其中的一部分:

网址是:

如何为现有 url 和我将创建的其他 URL 添加前缀:

?