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

json - Servant-server 的自定义 JSON 错误

使用servant时,我想以JSON 形式返回所有错误。目前,如果请求无法解析,我会看到这样的错误消息,以纯文本形式返回

相反,我想将其返回为application/json

我怎样才能做到这一点?文档说ServantErr是默认错误类型,我当然可以在处理程序中使用自定义错误进行响应,但是如果解析失败,我看不到如何返回自定义错误。

0 投票
1 回答
175 浏览

haskell - 如何使用 Servant 库中的 Enter 解决类型错误?

我正在尝试使用该enter函数来允许我使用一组异常运行我的 API 处理程序,这些异常我将在高级别上转换为 Servant,但是我在类型匹配方面遇到了麻烦。

鉴于这个最小的定义集:

我最终遇到了这种类型的错误:

异常来自调用enter. 供参考,声明enter

所以,当我打电话时enter runApp,我希望类型是这样的:

(上面我用来n ~ ExceptT ServantErr IO说明我的类型替换)

实际上,我从其他代码中知道(我试图模仿,但我不明白我哪里出错了),enter runApp应该/必须有这种类型:

所以,问题很多:

  • 实际类型是enter runApp什么(不是 ghci 会给我的,而是更具描述性的解释)?
  • (IO ResponseReceived)约束来自哪里?
  • 如何调整上述代码以使整个处理程序通过自然转换?
0 投票
1 回答
755 浏览

haskell - 使用 reflex-dom 客户端访问服务服务器

我正在使用 0.4 版的 reflex-dom 并且我有一个很小的 ​​reflex-dom 客户端:

XhrRequest with reflex/reflex-dom中所述,我使用的是_xhrResponse_responseText而不是decodeXhrResponse

当我使用 NASA URL 运行这个客户端时,它会显示一个漂亮的 JSON 字符串。因此我假设,这个 reflex-dom 客户端正在工作。

我也有一个小型仆人服务器:

当我在浏览器中使用 http://localhost:8080/name/3或访问此服务器时curl,我看到了预期的结果Marie Curie。因此我假设,这个服务服务器正在工作。

当我使用 localhost 的 URL 运行上述 reflex-dom 客户端时,我可以在服务器的 stdout 日志中看到请求,但客户端不显示Marie Curie的名称。相反,客户端只显示一个空字符串!所以作为一个团队,客户端和服务器不能一起工作!为什么?

0 投票
1 回答
398 浏览

haskell - 使用`enter`服务一个功能依赖错误

我稍微改变了servant教程中显示的应用程序来制作Readermonad a ReaderT,就像这样

问题是我无法启用readerServer功能,类型检查失败并出现这个难以理解的错误

任何想法出了什么问题?

0 投票
1 回答
102 浏览

haskell - 在servant中,如何根据 Accept 标头选择我的异常?

对于上下文,这是一种身份验证情况。在我的应用程序中,如果客户端没有经过身份验证,那么应用程序显然需要做出适当的响应。当我想根据调用服务器的应用程序类型选择不同的响应时,挑战就出现了。

下面是一个路由示例:

因此,HTML 响应将针对 CGI 应用程序。通常,它应该呈现一个身份验证页面,或者它应该抛出一个 303 以将用户引导到一个身份验证页面。

但是 JSON 响应将用于 Javascript 应用程序,我想简单地返回 404,因为 Javascript 将有其他方式进行身份验证。

这是我的顶级处理程序:

我尝试创建自己的 Javascript 内容类型,但 MimeRenderer 不允许我抛出异常。到目前为止,我唯一的想法是捕获“接受”标头并在处理程序内303404从处理程序中抛出。但这很糟糕,因为处理程序不应该知道有关实际客户端应用程序的任何信息。

有没有更清洁的方法来处理这个?

0 投票
1 回答
343 浏览

haskell - 在 Aeson 记录中使用自定义数据类型

前言:我仍然是一个 Haskell 菜鸟,如果我遗漏了一些明显的东西,请原谅我。我正在尝试为带有非标准数据类型(电子邮件地址)的字段的记录数据类型编写 aeson ToJSON 和 FromJSON 实例。

GHC 输出这些错误:

如何正确编写这些实例?

0 投票
1 回答
112 浏览

haskell - Haskell Servant 空路由组合器

我正在编写一些 CRUD 助手以获得乐趣和利润,并且我发现自己需要一条空路径或 noop 路径。mempty:>,如果你愿意的话。

这就是我想写的:

当然,这一切都建立在这个人身上:

是否有空路由组合器?

到目前为止,我已经通过next在这些系列中使用一个参数来解决这个问题,但对于 Servant 来说,它的惯用语要少得多。

0 投票
1 回答
142 浏览

postgresql - Opaleye 新型

我的 PostgreSQL 数据库中表的数据类型中的一个字段是一种UUID名为ItemId.

但是,当我编译我的项目时,GHC 会抛出:

哪里src/Api/Item.hs是:

我对 Haskell 还是很陌生,但问题似乎是 Opaleye 不知道如何转换ItemId为 aPGUuid但我知道它可以转换UUIDPGUuid. 我将如何编写实例以允许 Opaleye 进行此转换?

0 投票
1 回答
98 浏览

haskell - 在 Servant 中生成端点描述

Servant提供了一种从 API 定义生成文档的方法。但是,我认为没有办法(非正式地)记录每个端点的功能。对于上面链接中使用的示例,生成的文档包含:

在上面的示例中,我想念的是一种记录GET /hello端点功能的方法,我希望有一种方法可以通过对每个端点的非正式描述来扩充 API 文档。

我的猜测是,这将需要标记不同的端点以唯一地识别它们,据我所知,Servant 不支持。但是,我想知道如何用目前可用的东西来解决这个问题。

0 投票
1 回答
162 浏览

haskell - 自定义ToSchema自动推导生成的字段

我有以下类型:

这里我使用deriveJSON代替Generic机制,因为我需要为此数据类型调整 JSON 表示的字段名称:

需要前缀来为该类型生成镜头,但在 JSON 表示中不需要。

现在我正在尝试使用servant-swaggerToSchema生成Swagger文档,这需要一个Device. 现在的问题是生成的模式将具有上述访问器函数的给定前缀名称(_deviceId、、、_deviceName_deviceDType。相反,我会拥有修改后的版本(idnamedtype)。

有没有办法以这种方式自定义通用派生过程?