问题标签 [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.
haskell - 加入两个 Network.Wai.Application
我分别使用servant
和Network.Wai.Application.Static
用于 json api 和静态文件服务。我想加入这两个应用程序,如果staticApp
服务失败,请求应该去jsonApp
。
我试着找出并阅读websocketsOr
它是如何做到的。Websockets或
我终于写道:
但似乎其他人(wai 本身)会这样做,处理许多可能的情况。但我找不到。
我缺少哪些边缘情况(例外??)以及我可以使用哪些其他 api 来做同样的事情?
haskell - 包罗万象或默认路由
index.html
如今,如果请求的路由与现有 API 端点或其他静态资产不匹配,则需要从后端返回文件(例如 )的情况并不少见。这在使用react-router
and时特别方便browserHistory
。
我对如何与仆人一起处理这件事有点难过。我确实想知道拦截 404 是否是可行的方法,但是当然有时 API 需要合法地发出 404。这是我一直用来试验的那种东西:
如果请求与 API 端点或静态目录中的任何内容不匹配,我很想看到一个示例,说明如何添加发送 HTML 响应的“默认路由”。玩具回购在这里。
haskell - 在类型系统中为串行格式建模,例如 Servant
我正在开发一个忽略 XML 或 JSON 的存在而只支持附加字符数据的 API 集成。(Metro2格式,如果有兴趣)
我正在简化,但想象一个人需要像这样被序列化:
- 在 pos 0, 4 chars:消息中的字节数
- 在 pos 5:6 个字符:
"PERSON"
硬编码 - 在 pos 11: 20 字符:名称,左对齐和空格填充
- 在 pos 21:8 个字符:生日,
YYYYMMDD
- 在 pos 29:3 个字符:年龄,右对齐和零填充
数字字段始终右对齐并补零。文本字段始终左对齐并填充空格。
例如:
我可以在类型系统中表达这个吗?就像仆人做的那样?像这样的东西?
我可以静态检查我的序列化实现是否与类型匹配?
我可以静态检查第三个字段(Name
)的偏移量是否为11
?前面字段的长度加起来是 11?我假设没有,因为这似乎需要完全依赖类型的支持。
这是在正确的轨道上吗?
更新:我想静态验证的函数示例:
haskell - 如何解决 SqlBackend 和 PersistEntityBackend 之间的类型不匹配?
使用servant
和persistent
库创建 REST API,我在使用insertUnique
创建新实体时遇到类型不匹配错误。
这是有问题的功能:
出现以下错误:
供参考,runDb
功能:
和新App
类型:
我尝试过类型提示insertUnique
as的结果SqlBackend
,但这会导致同样令人困惑的错误。SqlBackend
和PersistentEntityBackend
类型不能互换吗?
或者单子格式不正确?
非常感谢任何帮助。
haskell - Haskell仆人wai中间件无法正常工作
所以,我想向我的服务服务器添加两个 wai 中间件。一种用于提供静态文件的中间件,一种用于日志记录的中间件。
我定义了我的 api ( router
),这就是我启动服务器的方式:
这就是我如何定义我的middleware
:
现在,如果我把它logStdoutDev
放在第一位,我就不能提供静态文件,但是如果我把它staticPolicy
放在第一位,我就可以提供静态文件,但是我失去了记录事件的能力(基本上它们被忽略了)。
问题真的是,如何wai
在servant中正确组合中间件。
haskell - Haskell Servant 客户端教程
我是 Haskell 和 Servant 的新手,正在尝试启动并运行官方教程。我一直在努力让本教程工作以查看它,但一整天都无法让它工作。我讨厌在这里发布这样的问题,但老实说我不知道为什么代码不能正常工作我没有对其进行任何更改。我想知道是否有其他人尝试实施本教程并遇到类似的问题。
我已经看到一些关于不再使用当前仆人版本的教程的帖子,但本教程似乎是仆人客户端的最新教程。
这是教程http://haskell-servant.readthedocs.io/en/stable/tutorial/Client.html
这是代码
这是我得到的错误
haskell - ZonedTime fromJSON toJSON
我对. Aeson
_Servant
ZonedTime
对于我的Servant
应用程序,我在 url: 中给出了一些时间.../2016-12-18T07:51:00+03:00/...
。
Servant
轻松将其转换为ZonedTime
with ... :> Capture "zt" ZonedTime :> ...
。
然后我的应用程序会进行一些计算,并且在 json-response 中我想将这个和其他一些ZonedTime
s 回馈给客户——以防客户想再次将这些时间给我的应用程序。
如果输入时区不为零+0X:00
(X / = 0),那么在输出上我也会得到+0X:00
,但如果在输入上我给出.../2016-12-18T07:51:00+00:00/...
,那么作为响应我得到2016-12-18T07:51:00Z
。如果我尝试Servant
再次将此字符串提供给.../2016-12-18T07:51:00Z/...
,则Servant
无法将其转换为ZonedTime
. 其实是退货HTTP 400 (Bad Request)
。
为什么?做什么的?
database - Haskell Servant 将自定义数据传递给身份验证处理程序
我正在使用自定义 monad(带有阅读器)轻松地将数据库池之类的数据传递给我的处理程序(在使用自定义 monad 之前,我曾经将连接作为 fn 参数传递)。
这就是我定义我的自定义 monad 的方式:
这ServerEnvironment
只是我用来携带数据的自定义数据类型。
问题是AuthHandler
我必须专门使用以下功能:
作为身份验证处理程序,我不能使用我的自定义处理程序:
而且我也无法通过,ConnectionPool
因为签名不能是:
那么,如何在不使用全局IO
状态的情况下将额外数据传递给servant 中的身份验证处理程序?
haskell - Haskell Servant 从处理程序获取当前路由/URL
我想获得与我的处理程序相对应的当前路线。这是我的服务器的模型,仅供参考:
这里有一些处理程序:
我的服务器:
所以,基本上我route1and2Handler
应该有某种方式来获取当前路线。HasServer
我已经尝试将请求对象放入我的处理程序并通过实现这样的实例从中提取 url :
[编辑]我刚刚注意到我正在查看旧版本仆人的 api,这不再有效。Newroute
有类型签名,route :: Proxy api -> Context context -> Delayed env (Server api) -> Router env
我真的看不出Request
从这里得到的方法。
而不是使route1and2Handler
类型签名成为Request -> Handler Text
,但我在尝试创建HasServer
实例时遇到了这个错误:
最后要指出的是,我的最终目标是从 中获取当前路线,Handler
在数据库中为路线添加访问计数仅用于示例目的。我对计算访问次数或类似情况的更好方法不感兴趣。
haskell - 将基于 ReaderT 的客户端包装器与 Servant 客户端一起使用
我正在尝试使用我将用来调用 REST 资源的ClientM
附加参数来扩展仆人的 monad 。Token
然后我为仆人模式匹配定义了以下内容
现在我的扩展客户来玩了。这就是我使用它的方式:
问题是如何以更好的方式实现getT
和运行。postT
我将发布我当前的解决方案,但希望这里更有经验的haskellers可以提出更好的解决方案