问题标签 [scotty]

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

haskell - 如何将 Scotty 参数转换为字符串

我是 Haskell 的新手,并使用 Scotty 网络库测试了一些概念。

但是,我无法让一个简单的 hello world 页面正常工作。我坚持将参数转换为字符串并应用于另一个函数。

这是尚未工作的高级代码。

错误信息

目标

hello函数是一个存根。我想证明以下机制有效。

  1. 将参数提取为字符串

  2. 应用于String -> String函数

  3. 将结果作为响应返回

我读过什么并尝试过什么

我已经阅读了 Scotty文档和一些代码示例

我读到paramis of typeParsable a => Text -> ActionM a并且ActionMis of type ActionT Text IO

我试过name :: T.Text <- param "name", T.unpack,liftIO等,但没有运气。我想我不完全理解这些类型。

问题

这些类型的用途paramActionM实际含义是什么?

如何将参数提取为字符串以与其他函数一起使用?

谢谢你。

0 投票
1 回答
271 浏览

html - 如何使用帖子正文中的文件内容将文件上传到网站

如何从浏览器将文件上传到我的网络服务器?服务器是用 Haskell 编写的,使用 Scotty。这是我尝试过的:

服务器:

索引.html:

当我在浏览器中访问http://localhost:3000时,单击“浏览”按钮,选择一个文件,然后单击“提交”。然后它把我带到一个名为http://localhost:3000/upload的空白页面,一个文件被保存到“/home/t/fileUpload/somelonghash”。这很好,但问题是保存的文件只包含这样的内容:

这不是原始文件的内容。

0 投票
1 回答
220 浏览

haskell - Scotty Convert GET Parameter / Lazy.Text 转换

我尝试将 GET 参数传递给函数并从结果中连接一个字符串

为了使我的应用程序更加有趣,我想使用一个需要 Num 参数类型实例的函数,例如

我如何转换/读取x到 a Num(or Maybe...) 并将函数结果转换回 a Data.Text.Internal.Lazy.Text

我试过

这会产生错误:

0 投票
1 回答
246 浏览

haskell - How to set a header with static middleware in Scotty?

Suppose I have a serving of static files, but they are without extension. I want to set header "Content-Type: image/png" for all of them which are serving from "some/" (1st rule). How to do it in this code?

I tried this:

and checked with Debug.Trace request's path, query string - all are empty, while actual request is "...:8080/some/somefile".

What is the correct way to do it?

0 投票
1 回答
929 浏览

haskell - 在内存中保存状态 [Haskell 服务器]

我正在尝试创建一个服务器,该服务器根据用户之前是否访问过它,从路由返回两个不同的值。我有以下代码:

我有两个问题: 1. 如何检查用户之前是否请求过路由?2. 我可以在哪里以及如何持久化应用程序状态?

0 投票
1 回答
193 浏览

haskell - OAuth2 证书应该如何存储在 Haskell 中

在haskell中存储OAuth2 jwk的正确方法是什么?我正在检索的证书来自https://www.googleapis.com/oauth2/v3/certs,我想避免每次需要验证令牌上的签名时都调用证书。选项似乎是 MVar、TVar、IORef 或 state monad,尽管我不太确定如何为此实现 state monad。

基本步骤如下(在 scotty 服务器后面运行):

  1. 从 IDP 接收令牌
  2. 用 JWk 解码 Jwt
  3. 如果由于签名错误而导致解码失败,则检查端点是否有新证书并修改包含证书的当前变量

我现在正在使用 jose-jwt、wreq 和 scotty,并且有一些可行的方法,但我想实现我所询问的方法,而不是我现有的方法。

我有兴趣替换的具体部分是:

我虽然将 Jwk 存储在 redis 中,但我认为有更好的方法可用。

预期的结果是能够安全地修改我从谷歌获得的证书并在后续解码中使用它,而无需不断地点击端点。
(注意:是的,我知道推出自己的安全性是不好的做法,但这只是出于兴趣)

0 投票
1 回答
68 浏览

haskell - wai-logger FileLogSpec 作为 Scotty 中间件报告 openFile:资源繁忙(文件已锁定)

我在 Haskell 中将 Scotty 用于后端应用程序,我有兴趣将所有请求记录到文件中。现有的 wai-middleware requestlogger是不够的,因为我想要FileLogSpec的属性,因为我喜欢 FileLogSpec 允许的多个但很短的日志文件。

我也对日志记录问题的替代解决方案持开放态度,但我对从 Scotty 切换不感兴趣。

我的问题是,在第一次请求后我收到此错误:

并且应用程序完全停止记录。

我目前将 wai-logger 变成中间件的实现是:

我尝试使用括号来清理记录器,如下所示:

这是我使用它的方式:

不幸的是,这导致了同样的结果。

我也在 wai logger 上创建了一个问题:https ://github.com/kazu-yamamoto/logger/issues/183

完整的源代码在这里:https ://github.com/into-cps-association/utilities_backend

0 投票
1 回答
79 浏览

haskell - 使用 scotty 从 POST 请求执行 shell 脚本

我正在使用 scotty 并且无论我尝试从 POST 请求执行 shell 脚本的任何方式,我都会遇到相同的类型错误。

使用关于是否可以从 haskell 程序调用 bash 或 shell 脚本的答案?在 Haskell中执行系统命令并没有帮助我更改错误消息。

错误内容如下:

我已经以多种方式更改了用于调用 shell 脚本的函数和库,包括:

() <- createProcess (proc "./shellscript.sh" ["-a", aparameter, "-b", bparameter, ...])

runProcess (shell "./shellscript.sh -a aparameter -b bparameter ...") >>= print

我尝试过使用 System.Process、System.Process.Typed 和 System.Cmd 库。

有人可以帮我理解我的类型不匹配。

0 投票
1 回答
141 浏览

haskell - 如何使用带有 scotty 和 selda 的 monad 堆栈?

我一直在尝试让一个与 scotty 一起运行的 Web 服务器,它可以使用 selda 与我的数据库通信。我认为使用单子变压器堆栈将是完成类似事情的方法。我一直在努力解决它,但我遇到了一些死胡同,这些类型似乎不可行。

我试图将它从这里的答案松散地建立起来,但我想包装路由器而不是单独的路由。withPersist我不希望我打开的连接数与我拥有的路由数成正比,如果我可以避免的话,我不希望每条路由都必须有一个呼叫。

所以我有一个Appwhich 是 type SeldaT Sqlite ScottyM,并使用withPersist(即 == withSQLite "mydb.db"),我会把它SeldaT Sqlite ScottyM变成一个ScottyM. 不过问题还是挺多的,以下是我对它们的理解:

  • SeldaT m a受 约束(MonadIO m, MonadMask m),并且 ScottyM 没有MonadIO
  • Scotty.get返回 a ScottyM (),我觉得这是我lift用来把它变成 a 的地方SeldaT Sqlite ScottyM,但是我得到了一个错误,可能与ScottyM不是MonadIO来自上面的实例有关。
  • 由于searchBook仍然是一个ActionM,我无法在其中运行查询。不确定如何get接受我的变压器堆栈而不是ActionM

以下是错误:

更新:在查看了一些类似的问题之后,我可能需要使用 ScottyT。不确定如何将 SeldaT 嵌套在 ScottyT 变压器中。

0 投票
1 回答
39 浏览

haskell - 如何像 Maybe monad 一样使用 Scotty 的 ActionT monad,并为错误返回早期的 http 响应?

我希望能够向用户返回自定义错误页面和状态,并在发生此类错误时结束ActionT monad 中的计算。我的理解是,这有点像Maybemonad,计算在Nothing遇到第一个时结束,但会发出最终错误消息(通过 HTTP 发送给用户)。

我有一个看起来像这样的代码片段:

代码至少有两个问题:finish这里似乎没有做任何特别有用的事情,即计算继续,***** Made it past cowMark ******每次加载通常会触发 404 的页面时,我仍然在日志中看到该消息。第二个问题是如果没有执行 404 错误,即使它应该是 404,我也会收到 200 响应。

有没有办法在 Scotty 中实现所需的行为?