问题标签 [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.
json - Servant-server 的自定义 JSON 错误
使用servant时,我想以JSON 形式返回所有错误。目前,如果请求无法解析,我会看到这样的错误消息,以纯文本形式返回
相反,我想将其返回为application/json
我怎样才能做到这一点?文档说ServantErr
是默认错误类型,我当然可以在处理程序中使用自定义错误进行响应,但是如果解析失败,我看不到如何返回自定义错误。
haskell - 如何使用 Servant 库中的 Enter 解决类型错误?
我正在尝试使用该enter
函数来允许我使用一组异常运行我的 API 处理程序,这些异常我将在高级别上转换为 Servant,但是我在类型匹配方面遇到了麻烦。
鉴于这个最小的定义集:
我最终遇到了这种类型的错误:
异常来自调用enter
. 供参考,声明enter
:
所以,当我打电话时enter runApp
,我希望类型是这样的:
(上面我用来n ~ ExceptT ServantErr IO
说明我的类型替换)
实际上,我从其他代码中知道(我试图模仿,但我不明白我哪里出错了),enter runApp
应该/必须有这种类型:
所以,问题很多:
- 实际类型是
enter runApp
什么(不是 ghci 会给我的,而是更具描述性的解释)? - (IO ResponseReceived)约束来自哪里?
- 如何调整上述代码以使整个处理程序通过自然转换?
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的名称。相反,客户端只显示一个空字符串!所以作为一个团队,客户端和服务器不能一起工作!为什么?
haskell - 使用`enter`服务一个功能依赖错误
我稍微改变了servant教程中显示的应用程序来制作Reader
monad a ReaderT
,就像这样
问题是我无法启用readerServer
功能,类型检查失败并出现这个难以理解的错误
任何想法出了什么问题?
haskell - 在servant中,如何根据 Accept 标头选择我的异常?
对于上下文,这是一种身份验证情况。在我的应用程序中,如果客户端没有经过身份验证,那么应用程序显然需要做出适当的响应。当我想根据调用服务器的应用程序类型选择不同的响应时,挑战就出现了。
下面是一个路由示例:
因此,HTML 响应将针对 CGI 应用程序。通常,它应该呈现一个身份验证页面,或者它应该抛出一个 303 以将用户引导到一个身份验证页面。
但是 JSON 响应将用于 Javascript 应用程序,我想简单地返回 404,因为 Javascript 将有其他方式进行身份验证。
这是我的顶级处理程序:
我尝试创建自己的 Javascript 内容类型,但 MimeRenderer 不允许我抛出异常。到目前为止,我唯一的想法是捕获“接受”标头并在处理程序内303
或404
从处理程序中抛出。但这很糟糕,因为处理程序不应该知道有关实际客户端应用程序的任何信息。
有没有更清洁的方法来处理这个?
haskell - 在 Aeson 记录中使用自定义数据类型
前言:我仍然是一个 Haskell 菜鸟,如果我遗漏了一些明显的东西,请原谅我。我正在尝试为带有非标准数据类型(电子邮件地址)的字段的记录数据类型编写 aeson ToJSON 和 FromJSON 实例。
GHC 输出这些错误:
如何正确编写这些实例?
haskell - Haskell Servant 空路由组合器
我正在编写一些 CRUD 助手以获得乐趣和利润,并且我发现自己需要一条空路径或 noop 路径。mempty
到:>
,如果你愿意的话。
这就是我想写的:
当然,这一切都建立在这个人身上:
是否有空路由组合器?
到目前为止,我已经通过next
在这些系列中使用一个参数来解决这个问题,但对于 Servant 来说,它的惯用语要少得多。
postgresql - Opaleye 新型
我的 PostgreSQL 数据库中表的数据类型中的一个字段是一种UUID
名为ItemId
.
但是,当我编译我的项目时,GHC 会抛出:
哪里src/Api/Item.hs
是:
我对 Haskell 还是很陌生,但问题似乎是 Opaleye 不知道如何转换ItemId
为 aPGUuid
但我知道它可以转换UUID
为PGUuid
. 我将如何编写实例以允许 Opaleye 进行此转换?
haskell - 在 Servant 中生成端点描述
Servant提供了一种从 API 定义生成文档的方法。但是,我认为没有办法(非正式地)记录每个端点的功能。对于上面链接中使用的示例,生成的文档包含:
在上面的示例中,我想念的是一种记录GET /hello
端点功能的方法,我希望有一种方法可以通过对每个端点的非正式描述来扩充 API 文档。
我的猜测是,这将需要标记不同的端点以唯一地识别它们,据我所知,Servant 不支持。但是,我想知道如何用目前可用的东西来解决这个问题。
haskell - 自定义ToSchema自动推导生成的字段
我有以下类型:
这里我使用deriveJSON
代替Generic
机制,因为我需要为此数据类型调整 JSON 表示的字段名称:
需要前缀来为该类型生成镜头,但在 JSON 表示中不需要。
现在我正在尝试使用servant-swaggerToSchema
生成Swagger文档,这需要一个Device
. 现在的问题是生成的模式将具有上述访问器函数的给定前缀名称(_deviceId
、、、_deviceName
)_deviceDType
。相反,我会拥有修改后的版本(id
、name
和dtype
)。
有没有办法以这种方式自定义通用派生过程?